OpenGLES 2.0 Problem mit einfachen Texturen

Unicate

Erfahrenes Mitglied
Hallo alle zusammen!

Ich habe ein Problem. ICh bin mir auch gerade nicht so sicher ob das hier rein passt, aber ich wusste nicht wo sonst.

Meine selbst erstellte Textur:
Code:
GLubyte texture[] = {
		255,255,255,
		0,0,0,
		255,255,255,
		0,0,0
};

Auf die Grafikkarte geladen mit:
Code:
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, 2, 2, 0, GL_RGB, GL_UNSIGNED_BYTE, texture);

angezeigt mit
Code:
glActiveTexture(GL_TEXTURE0);
glBindTexture(GL_TEXTURE_2D, _texture);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
// load texture
glUniform1i(_shaderStruct.samplerHandle, 0);

// update vertex information
glEnableVertexAttribArray(_shaderStruct.positionHandle);
glEnableVertexAttribArray(_shaderStruct.texCoordHandle);



glVertexAttribPointer(_shaderStruct.positionHandle, 3, GL_FLOAT, GL_FALSE, 0, _quad.getVertices());

glVertexAttribPointer(_shaderStruct.texCoordHandle, 3, GL_FLOAT, GL_FALSE, 0, _quad.getTexCoords());

// draw mesh
glDrawElements(GL_TRIANGLES, _quad.getIndiceCount(), GL_UNSIGNED_SHORT, _quad.getIndices());
und dem Quadrat, was so aussieht:

Code:
float verts[] = {
		-1.f, -1.f, 0.f,
		1.f, -1.f,0.f,
		1.f,1.f,0.f,
		-1.f,1.f,0.f
};
float normals[] = {
		0.f, 0.f, 1.f,
		0.f, 0.f, 1.f,
		0.f, 0.f, 1.f,
		0.f, 0.f, 1.f,
};
float texCoords[]  = {
		0.f,0.f,
		1.f,0.f,
		1.f,1.f,
		0.f,1.f
};

unsigned short indices[] = {
		0,1,3,1,3,2
};

Wir nicht richtig angezeigt.

Aus irgendeinem Grund seh ich das Quadrat weiss anstatt. 4 Pixel (2x2, s,w,s,w).

Der Shader ignoriert die Normalen (beabsichtigt!), deswegen werden die nicht mit in den Shader gegeben. Die brauch ich aber noch gar nicht.

Was mach ich falsch?

[Edit:]
Hier noch die Shader:
Code:
static const char *vertexShaderSource =
		"attribute 	vec4 a_position;		\n"
		"attribute 	vec3 a_normal;			\n"
		"attribute 	vec2 a_texCoords;		\n"
		"attribute	vec4 a_color;			\n"
		"varying	vec4 v_color;			\n"
		"varying	vec2 v_texCoords;		\n"
		"uniform 	mat4 u_mvp;				\n"
		"void main() {						\n"
		"    v_color = a_color;				\n"
		"    v_texCoords = a_texCoords;		\n"
		"	 gl_Position = u_mvp*a_position;\n"
		"}";

static const char *fragmentShaderSource =
		"precision 	mediump float;			\n"
		"varying	vec4 v_color;			\n"
		"varying	vec2 v_texCoords;		\n"
		"uniform 	sampler2D s_texture;	\n"
		"void main() {						\n"
		"	gl_FragColor = texture2D(s_texture, v_texCoords); \n"
		"}";

Ja, ich weiß, v_color tut noch nichts ;)
 

Anhänge

  • device-2012-04-13-105348.png
    device-2012-04-13-105348.png
    4,8 KB · Aufrufe: 4
Zuletzt bearbeitet:
Wer mit dem selben Problem kämpft:

Man betrachte die Zeile:

Code:
glVertexAttribPointer(_shaderStruct.texCoordHandle, 3, GL_FLOAT, GL_FALSE, 0, _quad.getTexCoords());

Die natürlich falsch war, da Texturkoordinaten natürlich nur aus 2 und nicht aus 3 Werten besteht.

Code:
glVertexAttribPointer(_shaderStruct.texCoordHandle, 2, GL_FLOAT, GL_FALSE, 0, _quad.getTexCoords());
 
Zurück