VBOs und Texturen

tdc

Bekanntes Mitglied
Hi,
ich habe mich ein wenig mit VBOs beschäftigt und z.B. das Färben von Flächen funktioniert bei mir bereits sowohl direkt über VBOs als auch über Shader. Aber wie mache ich das nun bei Texturen?
Selbst wenn ich die Texturen über Shader machen will, muss ich ja dennoch die Texturkoordinaten im VBO abspeichern.
Dazu habe ich mal ein KSKB zusammengestellt. (basierend auf dem Code von Oskar)
Das Ergebnis: Schwarzes Bild.

Woran könnte es liegen? (falsche Koordinaten? Fehler in den Shadern?)

Java:
package glsl3;

import static org.lwjgl.opengl.GL11.*;
import static org.lwjgl.opengl.GL13.*;
import static org.lwjgl.opengl.GL15.*;
import static org.lwjgl.opengl.GL20.*;

import java.io.IOException;
import java.nio.FloatBuffer;

import org.lwjgl.BufferUtils;
import org.lwjgl.LWJGLException;
import org.lwjgl.input.Mouse;
import org.lwjgl.opengl.ARBShaderObjects;
import org.lwjgl.opengl.Display;
import org.lwjgl.opengl.DisplayMode;
import org.newdawn.slick.opengl.Texture;
import org.newdawn.slick.opengl.TextureLoader;
import org.newdawn.slick.util.ResourceLoader;

import utility.Camera;
import utility.ShaderLoader;

public class ShaderDemo3 {

	private static int shaderProgram, shaderUniform;
	
	public static final String VERTEX_SHADER_LOCATION = "src/glsl2/textureshader.vert";
	public static final String FRAGMENT_SHADER_LOCATION = "src/glsl2/textureshader.frag";
	
	private static int vboVertexHandle;
	private static int vboTextureHandle;
	
	static Texture texture;
	
	final static int allVertices = 6;
	final static int vertexSize = 3;
	final static int texSize = 2;

	public static void main(String[] args) {
		try {
			Display.setDisplayMode(new DisplayMode(640, 480));
			Display.setVSyncEnabled(true);
			Display.setTitle("Shader Demo");
			Display.create();
		} catch (LWJGLException e) {
			System.err.println("The display wasn't initialized correctly. :(");
			Display.destroy();
			System.exit(1);
		}

		
		Camera cam = new Camera((float) Display.getWidth()
				/ (float) Display.getHeight(), -2.19f, 1.36f, 11.45f);
		cam.setFov(60);
		cam.applyProjectionMatrix();

		try {
			texture = TextureLoader.getTexture("PNG", ResourceLoader.getResourceAsStream("src/glsl2/cobblestone.png"));
		} catch (IOException e) {
			e.printStackTrace();
		}
		setUpShaders();
		setUpVBO();

		while (!Display.isCloseRequested()) {
			glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

			cam.applyModelviewMatrix(true);
			
			glUseProgram(shaderProgram);

			glActiveTexture(GL_TEXTURE0); // change active texture unit to number 0
			glBindTexture(GL_TEXTURE_2D, texture.getTextureID()); // bind the colorMap texture to the active texture unit (which is now 0)
			
			ARBShaderObjects.glUniform1iARB(shaderUniform , 0); // Notice the 0 to indicate you want to sample from the texture bound to Texture Unit GL_TEXTURE0.
			
			
			//render
			glEnableClientState(GL_VERTEX_ARRAY);
			glEnableClientState(GL_TEXTURE_COORD_ARRAY);

			glBindBuffer(GL_ARRAY_BUFFER, vboVertexHandle);
			glVertexPointer(vertexSize, GL_FLOAT, 0, 0L);
			
			glClientActiveTexture(GL_TEXTURE0);
			glBindBuffer(GL_ARRAY_BUFFER, vboTextureHandle);
			glTexCoordPointer(texSize, GL_FLOAT, 0, 0L);
			
			
			glUseProgram(0);

			cam.processMouse(1, 80, -80);
			cam.processKeyboard(16, 0.003f, 0.003f, 0.003f);

			if (Mouse.isButtonDown(0))
				Mouse.setGrabbed(true);
			else if (Mouse.isButtonDown(1))
				Mouse.setGrabbed(false);

			Display.update();
			Display.sync(60);
		}
		glDeleteProgram(shaderProgram);
		Display.destroy();
		System.exit(0);
	}

	private static void setUpShaders() {
		shaderProgram = ShaderLoader.loadShaderPair(VERTEX_SHADER_LOCATION, FRAGMENT_SHADER_LOCATION);
		shaderUniform = glGetUniformLocation(shaderProgram, "colorMap");
	}
	
	private static void setUpVBO() {
		FloatBuffer vertexData = BufferUtils.createFloatBuffer(allVertices
				* vertexSize);
		FloatBuffer textureData = BufferUtils.createFloatBuffer(allVertices
				* 2);
		
		vertexData.put(new float[] { 0,0,0 });
		textureData.put(new float[] { 0,0 });
		vertexData.put(new float[] { 1,0,0 });
		textureData.put(new float[] { 1,0 });
		vertexData.put(new float[] { 1,1,0 });
		textureData.put(new float[] { 1,1 });
		
		vertexData.put(new float[] { 0,0,0 });
		textureData.put(new float[] { 0,0 });
		vertexData.put(new float[] { 1,1,0 });
		textureData.put(new float[] { 1,1 });
		vertexData.put(new float[] { 0,1,0 });
		textureData.put(new float[] { 0,1 });
		
		vertexData.flip();
		textureData.flip();
		
		vboVertexHandle = glGenBuffers();
		glBindBuffer(GL_ARRAY_BUFFER, vboVertexHandle);
		glBufferData(GL_ARRAY_BUFFER, vertexData, GL_STATIC_DRAW);
		glBindBuffer(GL_ARRAY_BUFFER, 0);
		
		vboTextureHandle = glGenBuffers();
		glBindBuffer(GL_ARRAY_BUFFER, vboTextureHandle);
		glBufferData(GL_ARRAY_BUFFER, textureData, GL_STATIC_DRAW);
		glBindBuffer(GL_ARRAY_BUFFER, 0);
	}
}

textureshader.frag
Code:
uniform sampler2D colorMap;

void main (void)
{
	gl_FragColor = texture2D( colorMap, gl_TexCoord[0].st);
}

textureshader.vert
Code:
void main()
{	
	gl_TexCoord[0] = gl_MultiTexCoord0;
    gl_Position = gl_ModelViewProjectionMatrix*gl_Vertex;
}

Den Code für Camera und ShaderLoader gibts hier.
 
G

Guest2

Gast
Moin,

mindestens fehlt in Zeile 90 ein [c]glDrawArrays(GL_TRIANGLES, 0, 6);[/c].

Viele Grüße,
Fancy
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
T Indexed VBOs Spiele- und Multimedia-Programmierung 2
Kr0e GL3 - Vertex Arrays - VBOs Spiele- und Multimedia-Programmierung 5
G LIBGDX Texturen Problem Spiele- und Multimedia-Programmierung 1
T LWJGL: Terrain-Texturen / 2D-Array in Shader? Spiele- und Multimedia-Programmierung 2
Seikuassi LWJGL - Texturen flackern Spiele- und Multimedia-Programmierung 2
X [LWJGL] Binden von Texturen per PNG File und Texture Sheet Spiele- und Multimedia-Programmierung 1
F VertexBuffer & Texturen? Spiele- und Multimedia-Programmierung 5
Luk10 (LWJGL) Aufwendiges Animieren von Texturen Spiele- und Multimedia-Programmierung 16
B Probleme mit Texturen Spiele- und Multimedia-Programmierung 7
J Partikel Texturen verbinden Spiele- und Multimedia-Programmierung 6
S LWJGL Texturen Spiele- und Multimedia-Programmierung 14
P LWJGL Texturen Spiele- und Multimedia-Programmierung 6
D LWJGL - 2D Texturen werden nicht dargestellt Spiele- und Multimedia-Programmierung 12
T lwjgl Texturen werden nicht gezeichnet Spiele- und Multimedia-Programmierung 23
T JOGL im OrthoMode und Texturen verfärben sich Spiele- und Multimedia-Programmierung 3
B Texturen Deckkraft Spiele- und Multimedia-Programmierung 7
F Kleine GL Texturen auf grosse GL Textur kopieren? Spiele- und Multimedia-Programmierung 24
BattleMaster246 Alpha Kanal in Texturen Spiele- und Multimedia-Programmierung 7
Ivan Dolvich [LWJGL] Texturen überlagern sich Spiele- und Multimedia-Programmierung 2
R Texturen auf Strichmännchen Spiele- und Multimedia-Programmierung 10
S java /jogl /Texturen mit j3d Spiele- und Multimedia-Programmierung 3
A java3d, fehlende texturen unter windows (graka onboard) Spiele- und Multimedia-Programmierung 4
lumo JOGL und Texturen Spiele- und Multimedia-Programmierung 3
D Blender Model mit Texturen in Java Importieren Spiele- und Multimedia-Programmierung 10
G Verschiedene Texturen Spiele- und Multimedia-Programmierung 2
L Texturen? Spiele- und Multimedia-Programmierung 2
E GLUT und Texturen oder ist GLUT abgemeldet? Spiele- und Multimedia-Programmierung 5
T Problem mit Texturen im Web. Spiele- und Multimedia-Programmierung 4
M Wie kriege ich das mit den Texturen nur hin? Spiele- und Multimedia-Programmierung 9
D 2 Texturen & transparenz Spiele- und Multimedia-Programmierung 16
F Texturen laden? Spiele- und Multimedia-Programmierung 3
M Universe mit texturen und lichteffekten Spiele- und Multimedia-Programmierung 10
M Format für Texturen Spiele- und Multimedia-Programmierung 5
M Laden von Texturen nicht möglich Spiele- und Multimedia-Programmierung 11
L Wie kann ich mehrere Texturen auf ein Object File mappen Spiele- und Multimedia-Programmierung 4

Ähnliche Java Themen


Oben