openGL 同一场景下两个不同物体纹理被颜色覆盖的问题!急!急!急!
本人OPENGL的初学者,最近急着完成老师的作业,但是在绘制同一个场景的两个物体时候却出现了一个小问题,一个是一个长方体我想用纹理帖图,另一个是球就直接用颜色就可以了.但是当我在没有花球的时候长方体的纹理可以正常显示,而画了球后长方体就和球都变成了一个颜色.代码如下:
int InitGL(GLvoid)// All Setup For OpenGL Goes Here
{
if (!LoadGLTextures())// Jump To Texture Loading Routine ( NEW )
{
return FALSE;// If Texture Didn't Load Return FALSE
}
//glColorMaterial(GL_FRONT,GL_DIFFUSE);
//glEnable(GL_COLOR_MATERIAL);
glEnable(GL_TEXTURE_2D);// Enable Texture Mapping ( NEW )
glShadeModel(GL_SMOOTH);// Enable Smooth Shading
glClearColor(0.0f, 0.0f, 0.0f, 0.5f);// Black Background
glClearDepth(1.0f);// Depth Buffer Setup
glEnable(GL_DEPTH_TEST);// Enables Depth Testing
glDepthFunc(GL_LEQUAL);// The Type Of Depth Testing To Do
glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST);// Really Nice Perspective Calculations
quadratic=gluNewQuadric();// Create A Pointer To The Quadric Object (Return 0 If No Memory) (NEW)
gluQuadricNormals(quadratic, GLU_SMOOTH);// Create Smooth Normals (NEW)
gluQuadricTexture(quadratic, GL_TRUE);// Create Texture Coords (NEW)
return TRUE;// Initialization Went OK
}
int DrawGLScene(GLvoid)// Here's Where We Do All The Drawing
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);// Clear The Screen And The Depth Buffer
glLoadIdentity();// Reset The View
glTranslatef(0.0f,-1.0f,-5.0f);
glBindTexture(GL_TEXTURE_2D, texture[0]);
glColor3d(0,0,0);
glBegin(GL_QUADS);
// Front Face
glTexCoord2f(0.0f, 0.0f); glVertex3f(-1.85f, -0.02f, 0.15f);
glTexCoord2f(1.0f, 0.0f); glVertex3f( 1.85f, -0.02f, 0.15f);
glTexCoord2f(1.0f, 1.0f); glVertex3f( 1.85f, 0.02f, 0.15f);
glTexCoord2f(0.0f, 1.0f); glVertex3f(-1.85f, 0.02f, 0.15f);
// Back Face
glTexCoord2f(1.0f, 0.0f); glVertex3f(-1.85f, -0.02f, -0.15f);
glTexCoord2f(1.0f, 1.0f); glVertex3f(-1.85f, 0.02f, -0.15f);
glTexCoord2f(0.0f, 1.0f); glVertex3f( 1.85f, 0.02f, -0.15f);
glTexCoord2f(0.0f, 0.0f); glVertex3f( 1.85f, -0.02f, -0.15f);
// Top Face
glTexCoord2f(0.0f, 1.0f); glVertex3f(-1.85f, 0.02f, -0.15f);
glTexCoord2f(0.0f, 0.0f); glVertex3f(-1.85f, 0.02f, 0.15f);
glTexCoord2f(1.0f, 0.0f); glVertex3f( 1.85f, 0.02f, 0.15f);
glTexCoord2f(1.0f, 1.0f); glVertex3f( 1.85f, 0.02f, -0.15f);
// Bottom Face
glTexCoord2f(1.0f, 1.0f); glVertex3f(-1.85f, -0.02f, -0.15f);
glTexCoord2f(0.0f, 1.0f); glVertex3f( 1.85f, -0.02f, -0.15f);
glTexCoord2f(0.0f, 0.0f); glVertex3f( 1.85f, -0.02f, 0.15f);
glTexCoord2f(1.0f, 0.0f); glVertex3f(-1.85f, -0.02f, 0.15f);
// Right face
glTexCoord2f(1.0f, 0.0f); glVertex3f( 1.85f, -0.02f, -0.15f);
glTexCoord2f(1.0f, 1.0f); glVertex3f( 1.85f, 0.02f, -0.15f);
glTexCoord2f(0.0f, 1.0f); glVertex3f( 1.85f, 0.02f, 0.15f);
glTexCoord2f(0.0f, 0.0f); glVertex3f( 1.85f, -0.02f, 0.15f);
// Left Face
glTexCoord2f(0.0f, 0.0f); glVertex3f(-1.85f, -0.02f, -0.15f);
glTexCoord2f(1.0f, 0.0f); glVertex3f(-1.85f, -0.02f, 0.15f);
glTexCoord2f(1.0f, 1.0f); glVertex3f(-1.85f, 0.02f, 0.15f);
glTexCoord2f(0.0f, 1.0f); glVertex3f(-1.85f, 0.02f, -0.15f);
glEnd();
//glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);// Clear The Screen And The Depth Buffer
glLoadIdentity();// Reset The View
glTranslatef(-1.60f,-0.78f,-5.0f);
glColor3f(1.0f,0.0f,0.0f);
gluSphere(quadratic,0.1f,32,32);
return TRUE;// Keep Going
}
当我把glColor3f(1.0f,0.0f,0.0f);(倒数第三行)注释掉后球和长方体都铺上了纹理,这个我还好理解.但是加上了这句后球和长方体都成了红色,我试过都用纹理或都用颜色给这两个物体是可以的,但我现在想长方体用纹理,球直接用红色请问应该怎么修改代码?
谢谢大家了.
[解决办法]
画球不用纹理就把纹理关闭掉,glDisable(GL_TEXTURE_2D),加在glEnd()后面,另外球不用纹理就不用自动生成纹理坐标了吧,gluQuadricTexture(quadratic, GL_FALSE)。