[solved] GLSL: Drawelements und Texturen

Für Fragen zu Grafik APIs wie DirectX und OpenGL sowie Shaderprogrammierung.
Antworten
joggel

[solved] GLSL: Drawelements und Texturen

Beitrag von joggel »

Hallo...
also langsam bin ich am Verzweifeln.

Ich möchte per "glDrawElements" Geometrie zeichnen und textuieren.
Leider funktioniert das textuieren nicht so wie es soll wenn ich Shader verwende.
Ich poste mal einfach etwas Code
Die Renderfunktion:

Code: Alles auswählen

this->useShaderEffect(true); // Wenn ich dies ausschalte, also die FFP benutze, wird die Texture normal verwendet und alles läuft wie es soll.

glEnable( GL_TEXTURE_2D );
glBindTexture( GL_TEXTURE_2D, mTexture);
glClientActiveTexture(GL_TEXTURE0 + 0);
mShaderProgram.setUniformValue("colorTexture0",mTexture);

glMatrixMode(GL_MODELVIEW);
glPushMatrix();

glEnableClientState(GL_VERTEX_ARRAY);
glVertexPointer(3,GL_FLOAT,sizeof(Mesh::Vertex),&mVertexBuffer[0]);

glEnableClientState(GL_NORMAL_ARRAY);
glTexCoordPointer(2,GL_FLOAT,sizeof(Mesh::Vertex),&mVertexBuffer[0].mNx);

glEnableClientState(GL_TEXTURE_COORD_ARRAY);
glNormalPointer(GL_FLOAT,sizeof(Mesh::Vertex),&mVertexBuffer[0].mU);

glDrawElements(GL_TRIANGLES, mIndices.size(), GL_UNSIGNED_INT, &mIndices[0]);

glPopMatrix();
glDisableClientState(GL_TEXTURE_COORD_ARRAY);
glDisableClientState(GL_NORMAL_ARRAY);
glDisableClientState(GL_VERTEX_ARRAY);
Vertexshader:

Code: Alles auswählen

//uniform sampler2D colorTexture0;
void main(void)
{
 gl_TexCoord[0] = gl_MultiTexCoord0;
 gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex;
}
Fragmentshader:

Code: Alles auswählen

uniform sampler2D colorTexture0;
vec4 colTemp;

void main(void)
{
 colTemp = texture2D( colorTexture0, gl_TexCoord[0].st);
 gl_FragColor = colTemp;
}
Es sieht für mich so aus, als ob er das erste Texel (oder irgend ein anderes) nimmt, und diese Farbe für jedes Fragement nimmt.
Mach ich irgend etwas falsch bei dieser Verwendung?

Gruß joggel
Zuletzt geändert von joggel am 18.07.2011, 12:40, insgesamt 1-mal geändert.
kristof
Beiträge: 92
Registriert: 19.01.2009, 13:05

Re: GLSL: Drawelements und Texturen

Beitrag von kristof »

Code: Alles auswählen

glEnableClientState(GL_NORMAL_ARRAY);
glTexCoordPointer(2,GL_FLOAT,sizeof(Mesh::Vertex),&mVertexBuffer[0].mNx);

glEnableClientState(GL_TEXTURE_COORD_ARRAY);
glNormalPointer(GL_FLOAT,sizeof(Mesh::Vertex),&mVertexBuffer[0].mU);
Das Einzige was mir auf Anhieb auffällt ist, dass du in diesen Zeilen die glEnableClientState´s vertauscht hast. Und wenn ich deine Variablennamen richtig deute scheinen auch mNx und mU vertauscht zu sein.

Gruß, Kristof
joggel

Re: GLSL: Drawelements und Texturen

Beitrag von joggel »

kristof hat geschrieben:

Code: Alles auswählen

glEnableClientState(GL_NORMAL_ARRAY);
glTexCoordPointer(2,GL_FLOAT,sizeof(Mesh::Vertex),&mVertexBuffer[0].mNx);

glEnableClientState(GL_TEXTURE_COORD_ARRAY);
glNormalPointer(GL_FLOAT,sizeof(Mesh::Vertex),&mVertexBuffer[0].mU);
Das Einzige was mir auf Anhieb auffällt ist, dass du in diesen Zeilen die glEnableClientState´s vertauscht hast. Und wenn ich deine Variablennamen richtig deute scheinen auch mNx und mU vertauscht zu sein.

Gruß, Kristof
Was zur Hölle...?
Das kann ja nicht wahr sein!!
Seit 2 Tagen sitze ich daran, bin nur gefrustet... und es lag tatsächlich nur daran!! :x
Danke für die Hilfe.

Ps: Eigenartig ist aber, das es funktionerte wo ich die FFP benutzt habe... aber ich glaube das lag an den automatsich generierten Texturkoordinaten.
Antworten