【发布时间】:2010-10-25 01:41:31
【问题描述】:
有没有办法设置混合参数,使整个场景呈现灰度? (不使用 GLSL,仅使用管道函数)
谢谢
【问题讨论】:
有没有办法设置混合参数,使整个场景呈现灰度? (不使用 GLSL,仅使用管道函数)
谢谢
【问题讨论】:
不,所有颜色都是分开的。你需要一个像素着色器
【讨论】:
嗯,如果渲染成luminoscity+alpha FBO,然后画出来?
好吧,要么复制到这样的纹理,然后将纹理返回到 FBO - 也就是说,在大多数情况下,FBO 将是更好的解决方案(如果可用)。
请注意,我没有对此进行测试。
【讨论】:
实际上,为了完整起见,我会提到如果支持 GL_ARB_imaging 扩展,则有一种可能的解决方案:GL_COLOR_MATRIX,它可以转换传入的 RGBA 值。您可以将上面的 3x3 矩阵设置为全部 1/3.0,如下所示:
GLFloat graymat[] = {.33,.33,.33,0,.33,.33,.33,0,.33,.33,.33,0,0,0,0,1};
glMatrixMode(GL_COLOR_MATRIX)
glLoadIdentity()
glMultMatrixf(graymat)
尽管这听起来很棒,但并非所有驱动程序都支持硬件,这意味着根据您的 opengl 实现,您的驱动程序可能:A)完全忽略颜色矩阵,B)回退到软件渲染,或 C )(如果不支持扩展)引发 GLError。
如果您正在为一组有限的平台编写代码,并且它们支持此扩展,那么这将是最简单的方法。否则,您将需要另一种方法。
【讨论】: