灰度与OpenGL混合?

时间:2010-10-23 13:07:26

标签: c++ c opengl

有没有办法设置混合参数,以便整个场景以灰度渲染? (不使用GLSL,只使用管道功能)

由于

3 个答案:

答案 0 :(得分:0)

不,所有颜色都是分开的。你需要一个像素着色器

答案 1 :(得分:0)

嗯,也许是因为它被渲染成一个发光度+ alpha FBO,然后画出来了?

好吧,无论是那个还是复制到这样的纹理上,然后将纹理重新放到FBO上 - 也就是说,在大多数情况下,FBO将是一个更好的解决方案(如果可用的话)。

请注意,我没有对此进行测试。

答案 2 :(得分:0)

实际上,为了完整起见,我会提到如果支持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。

如果您为有限的一组平台编写代码,并且它们支持此扩展,那么这将是最简单的方法。否则,你需要另一种方法。