颜色干扰的问题解决了

简介:
 昨天被纹理贴图的颜色干扰问题弄的很是郁闷,自己也知道OpenGL是个状态机,状态设定好后就一直是有效的,但就是想不明白后面设置的状态怎么会影响到前面呢?
    在csdn上请教了高手后,终于知道问题改怎么解决了,只需要在绑定纹理前开启纹理,并且在使用完纹理后就关闭纹理,否则的话纹理就一直处于开启状态,所以会影响到不使用纹理贴图的那个物体的绘制,修改后代码如下:


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);
    glEnable(GL_TEXTURE_2D);
    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);
        glTexCoord2f(1.0f, 1.0f); glVertex3f( 1.0f,  1.0f,  1.0f);
        glTexCoord2f(0.0f, 1.0f); glVertex3f(-1.0f,  1.0f,  1.0f);

        // Back Face
        glNormal3f( 0.0f, 0.0f,-1.0f);                    // 法线背向观察者
        glTexCoord2f(1.0f, 0.0f); glVertex3f(-1.0f, -1.0f, -1.0f);
        glTexCoord2f(1.0f, 1.0f); glVertex3f(-1.0f,  1.0f, -1.0f);
        glTexCoord2f(0.0f, 1.0f); glVertex3f( 1.0f,  1.0f, -1.0f);
        glTexCoord2f(0.0f, 0.0f); glVertex3f( 1.0f, -1.0f, -1.0f);

        // Top Face
        glNormal3f( 0.0f, 1.0f, 0.0f);                    // 法线向上
        glTexCoord2f(0.0f, 1.0f); glVertex3f(-1.0f,  1.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);
        glTexCoord2f(1.0f, 1.0f); glVertex3f( 1.0f,  1.0f, -1.0f);

        // Bottom Face
        glNormal3f( 0.0f,-1.0f, 0.0f);                    // 法线朝下
        glTexCoord2f(1.0f, 1.0f); glVertex3f(-1.0f, -1.0f, -1.0f);
        glTexCoord2f(0.0f, 1.0f); glVertex3f( 1.0f, -1.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);
        // Right face
        glNormal3f( 1.0f, 0.0f, 0.0f);                    // 法线朝右
        glTexCoord2f(1.0f, 0.0f); glVertex3f( 1.0f, -1.0f, -1.0f);
        glTexCoord2f(1.0f, 1.0f); glVertex3f( 1.0f,  1.0f, -1.0f);
        glTexCoord2f(0.0f, 1.0f); glVertex3f( 1.0f,  1.0f,  1.0f);
        glTexCoord2f(0.0f, 0.0f); glVertex3f( 1.0f, -1.0f,  1.0f);
        // Left Face
        glNormal3f(-1.0f, 0.0f, 0.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);
        glTexCoord2f(1.0f, 1.0f); glVertex3f(-1.0f,  1.0f,  1.0f);
        glTexCoord2f(0.0f, 1.0f); glVertex3f(-1.0f,  1.0f, -1.0f);
    glEnd();                                // 正方形绘制结束
    glDisable(GL_TEXTURE_2D);
    glPopMatrix();
    glPopAttrib();

    glFlush();

    return TRUE;                                        // Everything Went OK
}
最终效果如图所示:


本文转自Phinecos(洞庭散人)博客园博客,原文链接:http://www.cnblogs.com/phinecos/archive/2007/08/10/850602.html,如需转载请自行联系原作者

目录
相关文章
|
3月前
|
安全
轨道表面的裂纹、磨损和腐蚀是如何影响安全性的
轨道表面的裂纹、磨损和腐蚀是如何影响安全性的
24 0
|
6月前
|
人工智能 算法 定位技术
基于等照度线和窗口匹配的图像修补算法
基于等照度线和窗口匹配的图像修补算法
|
6月前
|
搜索推荐 图形学
如何为3D模型设置自发光材质?
自发光贴图对模型的增效效果主要体现在增加真实感、强调细节、创造氛围、区分材质等方面。适当运用自发光贴图可以提升模型的视觉表现力,并为观众带来更加丰富、吸引人的视觉体验。
69 0
VS2019显示器颜色调整成护眼模式的颜色
工具 -> 选项 -> 环境 -> 字体和颜色,显示项为“纯文本”,设置项背景色:色调=85,饱和度=123,亮度=205,或者 rgb为199,238,206
|
4月前
[光源频闪] Basler相机光源频闪设置操作说明
[光源频闪] Basler相机光源频闪设置操作说明
77 0
|
6月前
|
图形学
怎么修改模型的表面颜色?
在3D模型中,材质颜色是物体表面外观的重要组成部分。通过手动设置或从纹理图像中提取颜色值,可以为模型赋予丰富多彩的外观。
76 1
|
8月前
|
传感器 测试技术 计算机视觉
Baumer工业相机堡盟相机VLXT-90M.I如何做平场校正阴影校正:消除图像明暗不均匀现象
Baumer工业相机堡盟相机VLXT-90M.I如何做平场校正阴影校正:消除图像明暗不均匀现象
101 0
|
10月前
【Three.js入门】纹理及其常用属性、透明纹理、环境遮挡贴图与强度
【Three.js入门】纹理及其常用属性、透明纹理、环境遮挡贴图与强度
295 0
效果处理(内阴影、外阴影、外发光、内发光、投影)
效果处理(内阴影、外阴影、外发光、内发光、投影)
效果处理(内阴影、外阴影、外发光、内发光、投影)
|
传感器 API 芯片
Flir Blackfly S工业相机:颜色校正讲解及配置与代码设置方法
- 介绍 Blackfly S相机使用的色彩校正矩阵(CCM,color correction matrix) - 并展示了如何计算出自定义的CCM。 - 通过代码进行颜色校正和自定义CCM配置
Flir Blackfly S工业相机:颜色校正讲解及配置与代码设置方法