glColor着色所有纹理

Sil*_*vae 6 c++ opengl textures

我对OpenGL相当新,所以答案可能很明显.我目前正在尝试使用C++中的GL_TRIANGLE_FAN创建一个蓝色圆圈.我的问题是,当我使用glColor4f设置颜色时,它会将我所有其他纹理设置为在其上方具有蓝色,如下所示(这应该是银色金属).

我使用下面显示的方法绘制纹理.

glLoadIdentity();
glTranslatef(x,y,0);

glBindTexture(GL_TEXTURE_2D, this->texture); 

glBegin(GL_QUADS);
    glTexCoord2f(0.0f, 0.0f); glVertex3f(0,0,0);
    glTexCoord2f(1.0f, 0.0f); glVertex3f(width,0,0);
    glTexCoord2f(1.0f, 1.0f); glVertex3f(width,height,0);
    glTexCoord2f(0.0f, 1.0f); glVertex3f(0,height,0);   
glEnd();
Run Code Online (Sandbox Code Playgroud)

我不确定我是否只需要清除它的标志就可以了,但是我已经被困了几天了.

Rob*_*ani 7

完成绘制后,取消绑定纹理并将颜色设置为白色:

glLoadIdentity();
glTranslatef(x,y,0);

glEnable( GL_TEXTURE_2D );
glBindTexture(GL_TEXTURE_2D, this->texture); 

glBegin(GL_QUADS);
    glTexCoord2f(0.0f, 0.0f); glVertex3f(0,0,0);
    glTexCoord2f(1.0f, 0.0f); glVertex3f(width,0,0);
    glTexCoord2f(1.0f, 1.0f); glVertex3f(width,height,0);
    glTexCoord2f(0.0f, 1.0f); glVertex3f(0,height,0);   
glEnd();

glColor4f(1, 1, 1, 1);
glBindTexture(GL_TEXTURE_2D, 0);
Run Code Online (Sandbox Code Playgroud)

如果您不在下一个对象上渲染纹理,请禁用纹理:

glDisable( GL_TEXTURE_2D );
Run Code Online (Sandbox Code Playgroud)

  • 对不起,但"解开纹理"?这是我第一次听到这样的废话 (2认同)

Fip*_*ipS 7

绘制蓝色圆圈后,应使用将颜色设置为白色(默认值)glColor4f(1.f, 1.f, 1.f, 1.f);.请注意,默认情况下,纹理会被当前设置的颜色调制(在您的情况下为蓝色),这就是为什么您的银色材质会变成蓝色调(最终颜色=蓝色*纹理颜色)的原因.