배경 픽셀의 색상을 반전시키는 방법


10

Java 및 jMonkeyEngine을 사용하여 게임 및 맵 편집기를 작성 중입니다. 지도 편집기에서 와이어 프레임 구로 브러시를 완성했습니다. 내 문제는 : 어디에서나 보이게하고 싶기 때문에이 브러시의 "뒤에있는"픽셀의 색상을 반전시키고 싶습니다. GLSL (fragment shader)로하고 싶었지만이 픽셀의 색상을 얻는 방법을 모르겠습니다.


jMonkeyEngine은 포스트 프로세스 효과를 지원합니까? 아마 이런 식으로 가야 할 것입니다.
sam hocevar

예, jMonkeyEngine은 포스트 프로세스 효과를 지원하지만 지금은 그 효과에 익숙하지 않습니다. 제안 해 주셔서 감사합니다.
m4tx

음, 간단한 방법이 있습니다. 나는 제대로 대답하려고 노력할 것입니다.
sam hocevar

glLogicOp (GL_XOR)를 사용할 수 있습니까? opengl.org/sdk/docs/man/xhtml/glLogicOp.xml
Adam

1
반전은 불포화 회색과 같은 모든 코너 케이스에서 가시성을 보장하지는 않으며 다른 많은 경우에는 가시성이 좋지 않습니다.
Lars Viklund

답변:


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
알파 블렌딩을 알고있는 것처럼 들립니다!
bobobobo
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.