c++ - 在OpenGL中绘制完全白色的纹理

标签 c++ opengl colors draw game-engine

我想做的是在 OpenGL 中绘制一个像普通纹理一样的纹理,但完全是白色的。我尝试执行 glColor3f(2.f, 2.f, 2.f) 但这不起作用。我只想绘制某种纹理的形状,但没有颜色,只有白色,所以我尝试绘制一个纹理,但白色......

为了澄清所需的结果:我希望从纹理采样的所有颜色的 RGB 部分都是白色,而 alpha 值是从纹理采样的颜色。因此,如果纹理中的值为(R,G,B,A),我希望采样的颜色为(1.0f,1.0f,1.0f,A)。

最佳答案

要将纹理中的颜色变为白色,但仍使用从纹理中采样的 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 值,这正是您想要的。

关于c++ - 在OpenGL中绘制完全白色的纹理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32131098/

相关文章:

c++ - C++ 中的 QHashIterator

c++传递数组而不是可变长度参数列表

c++ - qt 信号未定义引用错误

opengl - GLSL:启用/禁用纹理+着色器

c++ - opengl中对象的旋转

opengl - 使用 mmap() 访问视频 RAM,了解 OpenGL 上下文和视觉 ID

css - 颜色(颜色)在我的诺基亚 Windows Phone 上看起来不对

jquery - 尝试通过在 jquery 中使用包含过滤器来更改文本的颜色

C++ Asteroids Clone - 宇宙飞船运动问题

c++ - 可以使用 pdcurses 编辑任何 Windows 终端的调色板吗?