受纹理矩形影响的所有纹理颜色-OpenGL

时间:2018-11-06 22:04:50

标签: c++ opengl textures opengl-compat

我目前正在尝试为一些矩形着色,以表示游戏角色的碰撞盒。问题是我尝试仅应用于矩形的颜色也应用于我的角色和背景纹理。因此,如果我使用以下代码绘制矩形:

void DrawBackground(ui32 TextureID, Drawable_Rect BackgroundImage, v2f MinUV, v2f MaxUV)
    {
        glEnable(GL_TEXTURE_2D);
        glBindTexture(GL_TEXTURE_2D, TextureID);

        glBegin(GL_QUADS);
        glTexCoord2f(MinUV.x, MinUV.y);
        glVertex2f(BackgroundImage.BottomLeft.x, BackgroundImage.BottomLeft.y);

        glTexCoord2f(MaxUV.x, MinUV.y);
        glVertex2f(BackgroundImage.BottomRight.x, BackgroundImage.BottomRight.y);

        glTexCoord2f(MaxUV.x, MaxUV.y);
        glVertex2f(BackgroundImage.TopRight.x, BackgroundImage.TopRight.y);

        glTexCoord2f(MinUV.x, MaxUV.y);
        glVertex2f(BackgroundImage.TopLeft.x, BackgroundImage.TopLeft.y);

        glEnd();
        glFlush();

        glDisable(GL_TEXTURE_2D);
        glBindTexture(GL_TEXTURE_2D, 0);
    }

然后在绘制我的背景纹理之后:

for file in os.listdir(path):
    if file.starstwith(regex):
        os.rename(file, file.replace(" ", "_"))

然后我的矩形和背景都是红色,而不仅仅是我的矩形。为什么将颜色同时应用于矩形和纹理?

1 个答案:

答案 0 :(得分:3)

如果启用纹理,则默认情况下,纹理像素的颜色将乘以当前颜色,因为默认情况下纹理环境模式(GL_TEXTURE_ENV_MODE)为GL_MODULATE。参见glTexEnv

这会导致纹理的纹理像素的颜色与glColor3f设置的最后一个颜色“混合”:

在渲染纹理之前设置“白色”颜色以解决您的问题:

glColor3f(1.0f, 1.0f, 1.0f); 

同样,您可以将环境模式更改为GL_REPLACE

glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE);