【发布时间】:2013-10-13 18:39:33
【问题描述】:
OpenGL 的 glBlendFunc 中是否有办法放大目标 RGB? (即(10,50,5)到(20,100,10)
看来你唯一能做的就是添加源rgb(乘以
【问题讨论】:
-
我不明白为什么混合渲染目标的操作应该管理颜色值的缩放。如果您想要缩放目标或源目标的 rgb 值,为什么不在生成输出的着色器中执行此操作?另外,请注意,除非您使用整数纹理,否则渲染目标的组件值(红色、绿色、蓝色、alpha)不会占据离散范围(例如从 0 到 255),而是会容纳从 0.0 到1.0.
-
@SirDigbyChickenCaesar:片段着色器无法访问目标帧缓冲区值。也许下一代 GPU 会引入一个称为“混合着色器”的新着色器阶段,但迄今为止,混合是一种硬连线操作。
-
@SirDigbyChickenCaesar:哦,在您建议使用 FBO 并在片段着色器中采购 FBO 颜色附件纹理之前:这不起作用:纹理不能绑定到纹理单元和FBO 同时进行。
-
我并不是说您应该尝试在片段着色器中缩放先前绘制操作的颜色值。我的意思是,如果您希望任何绘制操作的颜色分量具有特定值(在此示例中,应用了“比例”),您可以在与该特定绘制操作关联的片段着色器中处理它。 (了解此绘制操作之前/之后的混合操作将如何影响产生的颜色值。)
-
现在,如果您只是想在事后缩放颜色值,您可以在单个渲染目标(而不是后台缓冲区)上执行所有绘制/混合操作。然后,一旦这些操作完成,您将后台缓冲区绑定为绘制缓冲区,并将前面步骤中使用的渲染目标绑定到着色器程序中的采样器,该着色器程序将比例应用于颜色值。
标签: opengl glblendfunc