Ich fing an, mit einem OpenGL ES 1.0 zu spielen, und ich stoße auf ein (Anfänger) Problem: Ich habe versucht, eine quadratische Textur auf den durch Dreiecke beschriebenen Würfel abzubilden.Mapping einer quadratischen Textur zu einem Dreieck
// Turn necessary features on
glEnable(GL_TEXTURE_2D);
glEnable(GL_BLEND);
glBlendFunc(GL_ONE, GL_SRC_COLOR);
glEnable(GL_CULL_FACE);
//glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST);
// Bind the number of textures we need, in this case one.
glGenTextures(1, &texture[0]);
glBindTexture(GL_TEXTURE_2D, texture[0]);
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
//Drawing code
static GLfloat rot = 0.0;
static const Vertex3D vertices[] = {
-1.0f,-1.0f,-1.0f, //0 00
1.0f,-1.0f,-1.0f, //1 10
1.0f, 1.0f,-1.0f, //2 11
-1.0f, 1.0f,-1.0f, //3 01
};
static const int vertexCnt = 3 * 2;
static const GLubyte cube[] = {
3,0,2,
1,2,0,
};
static const GLfloat texCoords[] = {
0,1,
0,0,
1,1,
1,0,
1,1,
0,0,
};
glClearColor(0.0, 0.0, 0.0, 1.0);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glLoadIdentity();
glTranslatef(0.0f, 0.0f, -3.0f);
glBindTexture(GL_TEXTURE_2D, texture[0]);
glEnableClientState(GL_VERTEX_ARRAY);
//glEnableClientState(GL_COLOR_ARRAY);
glEnableClientState(GL_NORMAL_ARRAY);
glEnableClientState(GL_TEXTURE_COORD_ARRAY);
glEnable(GL_COLOR_MATERIAL);
glTexCoordPointer(2, GL_FLOAT, 0, texCoords);
glVertexPointer(3, GL_FLOAT, 0, vertices);
//glColorPointer(4, GL_FLOAT, 0, colors);
glNormalPointer(GL_FLOAT, 0, normals);
glDrawElements(GL_TRIANGLES, vertexCnt, GL_UNSIGNED_BYTE, cube);
glDisableClientState(GL_VERTEX_ARRAY);
//glDisableClientState(GL_COLOR_ARRAY);
glDisableClientState(GL_NORMAL_ARRAY);
glDisableClientState(GL_TEXTURE_COORD_ARRAY);
Jetzt, nach zig Versuchen, ich kann es einfach nicht noch andere Seiten bekommen arbeiten ... Gibt es eine Faustregel gilt: für Fall, wenn auf Dreiecke Quadrat Textur-Mapping?
EDIT: Ich denke, ich finde heraus, wie das Mapping getan werden sollte. Aber es funktioniert nicht für dieses Beispiel (ein Gesicht). Kann jemand bitte einfach überprüfen, ob ich korrekt mapped habe (vorausgesetzt, dass der Rest des Codes funktioniert)?
Vielen Dank
Ich glaube nicht, gibt es eine Möglichkeit ordentlich ein Quadrat Karte auf ein Würfel, während dieselben Eckendaten wiederverwendet werden. Ich würde Ihren Würfel als 6 getrennte Quadrate = 24 Scheitelpunkte anstelle von 8 nachbearbeiten. –
Ich vermute, dass Ihr 'Normalen' Array falsch ist. Können Sie uns zeigen, was der Inhalt Ihres normalen Zeigers ist? Änderst du die Normale für jedes Gesicht? –
Normalen sind irgendwie falsch, aber ich wusste nicht, dass sie Auswirkungen auf Textur Mapping haben .. Ich dachte, dass sie nur die Beleuchtung beeinflussen ... wird es überprüfen.Danke – sinek