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)
我不确定我是否只需要清除它的标志就可以了,但是我已经被困了几天了.
完成绘制后,取消绑定纹理并将颜色设置为白色:
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)
绘制蓝色圆圈后,应使用将颜色设置为白色(默认值)glColor4f(1.f, 1.f, 1.f, 1.f);.请注意,默认情况下,纹理会被当前设置的颜色调制(在您的情况下为蓝色),这就是为什么您的银色材质会变成蓝色调(最终颜色=蓝色*纹理颜色)的原因.