Je rencontre un problème avec le mappage de texture dans OpenGL. J'essaie d'appliquer différentes textures à différents objets de la scène, mais je trouve que l'application d'une deuxième texture à un second objet change les coordonnées de texture (je pense) sur la première. Les deux objets sont un cube et un cylindre.Problème de coordonnées de texture OpenGL
Avec une seule texture est activée, la scène ressemble à ceci:
Si activer puis textures pour 1 ou plusieurs autres objets, je vois cela (je ne suis pas trop pris la peine de la mauvaise application de texture sur les «roues» en ce moment):
Ce qui pourrait être à l'origine de cela? est en dessous de mon code de dessin pour le cube et cylindres:
Cube:
//Alias the values for easier reading
double X = Position().X;
double Y = Position().Y;
double Z = Position().Z;
double W = _fWidth;
double H = _fHeight;
double D = _fDepth;
//Set textures if necessary
if(super._blHasTexture)
{
super._obTexture.bind(gl);
}
_obTexture.enable(gl);
gl.glColor3f(0.5f, 0.5f, 0.7f);
//Draw
gl.glBegin(GL2.GL_QUADS);
//Front
gl.glNormal3f(0f, 0f, 1f);
gl.glVertex3d(X, Y, Z); gl.glTexCoord2f(0f, 0f);
gl.glVertex3d(X+W, Y, Z); gl.glTexCoord2f(1f, 0f);
gl.glVertex3d(X+W, Y-H, Z); gl.glTexCoord2f(1f, 1f);
gl.glVertex3d(X, Y-H, Z); gl.glTexCoord2f(0f, 1f);
//Back
gl.glNormal3f(0f, 0f, -1f);
gl.glVertex3d(X, Y, Z-D); gl.glTexCoord2f(0f, 0f);
gl.glVertex3d(X+W, Y, Z-D); gl.glTexCoord2f(1f, 0f);
gl.glVertex3d(X+W, Y-H, Z-D); gl.glTexCoord2f(1f, 1f);
gl.glVertex3d(X, Y-H, Z-D); gl.glTexCoord2f(0f, 1f);
//Left
gl.glNormal3f(-1f, 0f, 0f);
gl.glVertex3d(X, Y, Z); gl.glTexCoord2f(0f, 0f);
gl.glVertex3d(X, Y, Z-D); gl.glTexCoord2f(1f, 0f);
gl.glVertex3d(X, Y-H, Z-D); gl.glTexCoord2f(1f, 1f);
gl.glVertex3d(X, Y-H, Z); gl.glTexCoord2f(0f, 1f);
//Right
gl.glNormal3f(1f, 0f, 0f);
gl.glVertex3d(X+W, Y, Z); gl.glTexCoord2f(0f, 0f);
gl.glVertex3d(X+W, Y, Z-D); gl.glTexCoord2f(1f, 0f);
gl.glVertex3d(X+W, Y-H, Z-D); gl.glTexCoord2f(1f, 1f);
gl.glVertex3d(X+W, Y-H, Z); gl.glTexCoord2f(0f, 1f);
//Top
gl.glNormal3f(0f, 1f, 0f);
gl.glVertex3d(X, Y, Z); gl.glTexCoord2f(0f, 0f);
gl.glVertex3d(X+W, Y, Z); gl.glTexCoord2f(1f, 0f);
gl.glVertex3d(X+W, Y, Z-D); gl.glTexCoord2f(1f, 1f);
gl.glVertex3d(X, Y, Z-D); gl.glTexCoord2f(0f, 1f);
//Bottom
gl.glNormal3f(0f, -1f, 0f);
gl.glVertex3d(X, Y-H, Z); gl.glTexCoord2f(0f, 0f);
gl.glVertex3d(X+W, Y-H, Z); gl.glTexCoord2f(1f, 0f);
gl.glVertex3d(X+W, Y-H, Z-D); gl.glTexCoord2f(1f, 1f);
gl.glVertex3d(X, Y-H, Z-D); gl.glTexCoord2f(0f, 1f);
gl.glEnd();
_obTexture.disable(gl);
Cylindre:
GLUquadric quad = glu.gluNewQuadric();
glu.gluQuadricTexture(quad, true);
_obTexture.bind(gl);
_obTexture.enable(gl);
//Draw the caps
gl.glBegin(GL2.GL_TRIANGLE_FAN);
gl.glVertex3f(0f, 0f, 0.01f);
gl.glTexCoord2f(0f, 0f);
for(int t = 0; t < 20; t++)
{
float X = _fRadius * (float)Math.cos(t);
float Y = _fRadius * (float)Math.sin(t);
gl.glVertex3f(X, Y, 0.01f);
}
gl.glTexCoord2f(1f, 1f);
gl.glEnd();
gl.glBegin(GL2.GL_TRIANGLE_FAN);
gl.glVertex3f(0f, 0f, -0.01f + _fHeight);
gl.glTexCoord2f(0f, 0f);
for(int t = 0; t < 20; t++)
{
float X = _fRadius * (float)Math.cos(t);
float Y = _fRadius * (float)Math.sin(t);
gl.glVertex3f(X, Y, -0.01f + _fHeight);
}
gl.glTexCoord2f(1f, 1f);
gl.glEnd();
glu.gluCylinder(quad, _fRadius, _fRadius, _fHeight, 20, 1);
_obTexture.disable(gl);
Fantastique! Cela l'a réparé tout de suite, merci beaucoup. – AndyBursh