OpenGL 的 glBlendFunc

标签 opengl glblendfunc

OpenGL 的 glBlendFunc 中有没有办法放大目标 RGB? (即(10,50,5)到(20,100,10)

看来你唯一能做的就是添加源 rgb(乘以 <1 的一些因素)

最佳答案

如果您想将此混合函数用于所有绘制操作/所有对象(当然还有一个初始非零值),您可以做的是按指数方式解释颜色。想象一下,写入颜色缓冲区的是某个底数的指数,例如2,所以加到指数实际上将乘以 2 的幂。

然后,如果您还没有这样做,则需要引入一个后处理步骤。在那里您读取颜色值并取 2 的颜色次方,这将为您提供最终颜色。

当然,初始值必须是对数。

但是,如果您只想为一些 绘制操作增加颜色(我希望只有场景中的最后一个),您必须进一步拆分该过程:首先绘制“正常”内容,其中你使用正常的颜色混合。然后将颜色转换为对数标度(您可以为此使用单独的纹理),将其用于下一个应该乘以颜色的绘制操作(但您告诉 OpenGL 添加颜色),然后通过获取转换回线性标度电源。

当然你也可以使用e作为底数,在这种情况下你使用自然对数和exp函数。

关于OpenGL 的 glBlendFunc,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15726017/

相关文章:

c++ - opengl 3D 编程中的 SDL 与 GLUT

c++ - 如何将片段着色器仅应用于 OpenGL 中的一个对象?

c++ - 如何实现自己的混合功能?

c++ - OpenGL 多位 Alpha 纹理

opengl - 使用 OpenGL 混合音频

objective-c - OpenGL ES 混合功能,因此颜色始终显示在背景上

c - 运行 OpenGL 着色器以修改现有的纹理/帧缓冲区

opengl - 我如何知道我使用的是哪个版本的 OpenGL?

c++ - 单击窗口 x 轴的末端时,鼠标单击会导致 OpenGL 中的光线创建不正确吗?

opengl - glBlendFunc 禁用着色器