c++ - 所有纹理颜色受彩色矩形影响 - OpenGL

标签 c++ opengl textures opengl-compat

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

void DrawRect(v2f MinPoint, v2f MaxPoint) 
    {
        glBegin(GL_QUADS);

        glColor3f(1.0f, 0.0f, 0.0f); //Red color
        glVertex2f(MaxPoint.x, MaxPoint.y);
        glColor3f(1.0f, 0.0f, 0.0f);
        glVertex2f(MinPoint.x, MaxPoint.y);
        glColor3f(1.0f, 0.0f, 0.0f);
        glVertex2f(MinPoint.x, MinPoint.y);
        glColor3f(1.0f, 0.0f, 0.0f);
        glVertex2f(MaxPoint.x, MinPoint.y);

        glEnd();
        glFlush();
    }

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

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);
    }

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

最佳答案

如果启用纹理,则默认情况下纹理元素的颜色会乘以当前颜色,因为默认情况下纹理环境模式 (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);

关于c++ - 所有纹理颜色受彩色矩形影响 - OpenGL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53180760/

相关文章:

c++ - cmake找不到 “OPENCV”提供的程序包配置文件

c++ - 我如何知道源代码使用的是哪个版本的 OpenGL?

c++ - SDL_surface 到 OpenGL 纹理

c++ - 立方体上的纹理贴图出现错误

c++ - 设置GL_TEXTURE_2D_ARRAY,帧缓冲区不完整

c++ - 任意大小的 DirectX9 纹理(非 2^n)

c# - 将自定义类型的 Safearray 从 C++ 传递到 C#

c++ - 需要帮助理解 C++ 中的组合和类函数

c++ - 重载比较运算符

c++ - 如何使用 glDrawElements() 绘制硬表面立方体?