c++ - 如何通过简单的乘法将纹理颜色混合到其下面的颜色?

标签 c++ opengl blending

所以我希望我的纹理颜色与其下面的颜色相乘,如何使用 glBlendFunc() 来完成此操作?

例如:如果我有一个纹理颜色 (0.31, 0.51, 0.124),并且其下面有一个颜色 (0.83, 0.64, 0.12),则结果颜色将为 0.31*0.83, 0.51*0.64, 0.124*0.12 。如何做到这一点?

最佳答案

So i want my texture colors to multiply with the colors under it, how this can be done with glBlendFunc() ?

通过“纹理颜色”,我假设您的意思是“glTexEnv 过程输出的颜色”。或者,使用更严格的OpenGL规范语言,片段颜色。

无论如何,这是一个 simple matter of blending 。如果您使用 OpenGL 2.1 或更高版本:

glBlendEquationSeparate(GL_FUNC_ADD, GL_FUNC_ADD); //No, that's not a typo. Read the wiki article.
glBlendFuncSeparate(GL_DST_COLOR, GL_ZERO, GL_DST_ALPHA, GL_ZERO);

这会导致目标颜色(帧缓冲区中的颜色)与源颜色(来自 glTexEnv 的颜色)相乘,并加到零(从技术上讲,零乘以目标颜色)。

关于c++ - 如何通过简单的乘法将纹理颜色混合到其下面的颜色?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6932878/

相关文章:

opengl - GL_ALPHA、GL_LUMINANCE

algorithm - 如何混合特定数量的两种颜色

c++ - 如何使用编译时预定义图像在 QT 中定义图标?

c++ - _dl_runtime_resolve -- 共享对象何时加载到内存中?

c++ - 类的常规实例可以调用常量函数吗?

javascript - 三个 JS 透明度与 ShaderMaterial

filter - OpenAL同步

c++ - 如何在 C++ 中使用动态矩阵作为函数的参数?

c++ - OpenGL 鼠标跟踪(自由线)

opengl - 在 GLSL 中选择立方体贴图的面