专注收集记录技术开发学习笔记、技术难点、解决方案
网站信息搜索 >> 请输入关键词:
您当前的位置: 首页 > 图形/图像

OpenGL中进行纹理贴图出现颜色干扰的有关问题,请

发布时间:2011-06-27 20:38:57 文章来源:www.iduyao.cn 采编人员:星星草
OpenGL中进行纹理贴图出现颜色干扰的问题,请高手指点
今天发现了一个奇怪的现象:如果我要画两个物体,第一个不用纹理贴图,而第2个要纹理贴图,就发现第一个的颜色会干扰到纹理贴图的,结果两个物体的颜色都变得很怪了,怎么能让画完第一个物体后,它的颜色不对第2个产生影响呢?
我现在的代码如下,第一个画三菱锥(不用纹理贴图,只用平滑着色),第二个画一个正方体并用纹理贴图:

int   COpenGLDemoView::DrawGLScene()                                                                      
{//   Here 's   Where   We   Do   All   The   Drawing

        glClear(GL_COLOR_BUFFER_BIT   |   GL_DEPTH_BUFFER_BIT);         //   Clear   Screen   And   Depth   Buffer

glPushAttrib(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT|GL_CURRENT_BIT);
glPushMatrix();

glShadeModel(GL_SMOOTH);
        glLoadIdentity();                                                                         //   Reset   The   Current   Modelview   Matrix
glTranslatef(-1.5f,0.0f,-6.0f);//物体左移1.5,向内移6,相当于移动镜头一样,让物体进入镜头中
glRotatef(rTri,0.0f,1.0f,0.0f);
glBegin(GL_TRIANGLES); //   绘制三角形
glColor3f(1.0f,0.0f,0.0f); //   红色
glVertex3f(   0.0f,   1.0f,   0.0f); //   三角形的上顶点   (前侧面)
glColor3f(0.0f,1.0f,0.0f); //   绿色
glVertex3f(-1.0f,-1.0f,   1.0f); //   三角形的左下顶点   (前侧面)
glColor3f(0.0f,0.0f,1.0f); //   蓝色
glVertex3f(   1.0f,-1.0f,   1.0f); //   三角形的右下顶点   (前侧面)
glColor3f(1.0f,0.0f,0.0f); //   红色
glVertex3f(   0.0f,   1.0f,   0.0f); //   三角形的上顶点   (右侧面)
glColor3f(0.0f,0.0f,1.0f); //   蓝色
glVertex3f(   1.0f,-1.0f,   1.0f); //   三角形的左下顶点   (右侧面)
glColor3f(0.0f,1.0f,0.0f); //   绿色
glVertex3f(   1.0f,-1.0f,   -1.0f); //   三角形的右下顶点   (右侧面)
glColor3f(1.0f,0.0f,0.0f); //   红色
glVertex3f(   0.0f,   1.0f,   0.0f); //   三角形的上顶点   (后侧面)
glColor3f(0.0f,1.0f,0.0f); //   绿色
glVertex3f(   1.0f,-1.0f,   -1.0f); //   三角形的左下顶点   (后侧面)
glColor3f(0.0f,0.0f,1.0f); //   蓝色
glVertex3f(-1.0f,-1.0f,   -1.0f); //   三角形的右下顶点   (后侧面)
glColor3f(1.0f,0.0f,0.0f); //   红色
glVertex3f(   0.0f,   1.0f,   0.0f); //   三角形的上顶点   (左侧面)
glColor3f(0.0f,0.0f,1.0f); //   蓝色
glVertex3f(-1.0f,-1.0f,-1.0f); //   三角形的左下顶点   (左侧面)
glColor3f(0.0f,1.0f,0.0f); //   绿色
glVertex3f(-1.0f,-1.0f,   1.0f); //   三角形的右下顶点   (左侧面
glEnd(); //   三角形绘制结束

glPopMatrix();
glPopAttrib();


glPushAttrib(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT|GL_CURRENT_BIT);
glPushMatrix();

glLoadIdentity();
glTranslatef(1.5f,0.0f,-6.0f);

glRotatef(xrot,1.0f,0.0f,0.0f);
glRotatef(yrot,0.0f,1.0f,0.0f);
glRotatef(zrot,0.0f,0.0f,1.0f);
glBindTexture(GL_TEXTURE_2D,   texture[0]);
glBegin(GL_QUADS); //     绘制正方形

//   Front   Face
glNormal3f(   0.0f,   0.0f,   1.0f); //   法线指向观察者
glTexCoord2f(0.0f,   0.0f);   glVertex3f(-1.0f,   -1.0f,     1.0f);
glTexCoord2f(1.0f,   0.0f);   glVertex3f(   1.0f,   -1.0f,     1.0f);
友情提示:
信息收集于互联网,如果您发现错误或造成侵权,请及时通知本站更正或删除,具体联系方式见页面底部联系我们,谢谢。

其他相似内容:

热门推荐: