开发者

Grayscale blending with OpenGL?

开发者 https://www.devze.com 2023-01-20 22:00 出处:网络
Is there a way to set the blending parameters so the whole scene renders in graysca开发者_开发百科le? (without using GLSL, only pipeline functions)

Is there a way to set the blending parameters so the whole scene renders in graysca开发者_开发百科le? (without using GLSL, only pipeline functions)

Thanks


No, all colors are separated. You need a pixel shader for that


Hm, maybe if it was rendered to a luminoscity+alpha FBO, and then that drawn?

Well, either that or copied onto such a texture, then the texture back onto the FBO - that said, FBO's would be a better solution (if available) in most cases.

Please note that I haven't tested this.


Actually, for completeness sake, I'll mention that there is one possible solution if the GL_ARB_imaging extension is supported: the GL_COLOR_MATRIX, which transforms incoming RGBA values. You could set the upper 3x3 matrix to all 1/3.0 like so:

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)

However great this may sound, though, not all drivers support this in hardware, which means that depending on your opengl implementation, your driver might: A) ignore the color matrix totally, B) fall back to software rendering, or C) (if the extension is not supported) raise a GLError.

If you are writing your code for a limited set of platforms, and they support this extension, then it would be the easiest way. Otherwise, you'll need another approach.

0

精彩评论

暂无评论...
验证码 换一张
取 消