在 OpenGL 中绘制全白纹理

Draw Completely White Texture in OpenGL

我想做的是在 OpenGL 中绘制一个像正常一样的纹理,但完全是白色的。我试过 glColor3f(2.f, 2.f, 2.f) 但这不起作用。我只想画一个特定纹理的形状,但没有颜色,只有白色,所以我想画一个纹理,但白色...

阐明期望的结果:我希望从纹理中采样的所有颜色的 RGB 部分为白色,而 alpha 值是从纹理中采样的值。所以如果纹理中的值为(R,G,B,A),我希望采样颜色为(1.0f,1.0f,1.0f,A)。

使用像素着色器并将每个片段的颜色设置为白色。

在代码中创建一个 1x1 白色 RGBA 位图。

GLubyte texData[] = { 255, 255, 255, 255 };

将数据复制到纹理。

glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, 1, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, texData);

要将纹理的颜色变为白色,但仍使用从纹理采样的 alpha 值,您可以使用:

glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_ADD);
glColor4f(1.0f, 1.0f, 1.0f, 1.0f);

使用GL_ADD纹理环境模式,传入的片​​段颜色(上面的第二次调用设置为白色)将添加到从纹理采样的颜色以获得输出颜色。由于输出颜色被限制在 [0.0, 1.0] 范围内,纹理的颜色分量无关紧要,因为它们将在结果被限制为 1.0 之前添加到 1.0。因此输出的 RGB 颜色部分将始终为白色。

不太明显的部分是 alpha 值发生了什么。根据规范,对于 GL_ADD 纹理环境模式,来自传入片段的 alpha 值和从纹理采样的 alpha 值 相乘。将片段 alpha 设置为 1.0,这意味着结果值是纹理的 alpha 值,这正是您想要的。