如何反转背景像素的颜色


10

我正在使用Java和jMonkeyEngine编写游戏和地图编辑器。在地图编辑器中,我已通过线框球体完成了笔刷。我的问题是:我想使它在任何地方都可见,因此我想反转此笔刷“后面”的像素的颜色。我想用片段着色器(GLSL)来做,但是我不知道如何获得该像素的颜色。


jMonkeyEngine是否支持后期效果?您可能必须采用这种方式。
sam hocevar

是的,jMonkeyEngine支持后期处理效果,但是目前我对它们还不太熟悉。感谢您的建议。
m4tx 2012年

嗯,没关系,有更简单的方法。我会尝试正确回答。
sam hocevar

可以使用glLogicOp(GL_XOR)吗?opengl.org/sdk/docs/man/xhtml/glLogicOp.xml
亚当

1
请注意,反转并不能保证您在很多角落情况下(例如不饱和灰色)的可见性,并且在许多其他情况下可见性也很差。
拉尔斯·维克伦德

Answers:


16

快速简便的方法是使用带有以下参数的标准混合方程式:

glEnable(GL_BLEND);
glBlendFunc(GL_ONE_MINUS_DST_COLOR, GL_ZERO);

如果src是源颜色(来自新对象的一种)和dst是目标颜色(位于帧缓冲区中的一种),它将按如下方式计算新颜色:

new = src * (1 - dst) + dst * 0
    = src * (1 - dst)

所以,你只需要设置src = 1即。白色,您将获得反视频。GLSL片段着色器将是:

void main(void) {
    gl_FragColor = vec4(1.0, 1.0, 1.0, 1.0);
}

4
听起来您知道您的Alpha混合效果!
bobobobo 2012年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.