Jak odwrócić kolor piksela tła


10

Piszę edytor gier i map za pomocą Java i jMonkeyEngine. W edytorze map mam pędzel zrobiony przez sferę szkieletową. Mój problem brzmi: chcę, aby był widoczny wszędzie, więc chcę odwrócić kolor piksela „za” tym pędzlem. Chciałem to zrobić za pomocą modułu cieniującego fragmenty (GLSL), ale nie wiem, jak uzyskać kolor tego piksela.


Czy jMonkeyEngine obsługuje efekty postprocesowe? Prawdopodobnie będziesz musiał iść tą drogą.
sam hocevar

Tak, jMonkeyEngine obsługuje efekty postprocesowe, ale w tej chwili nie znam ich zbyt dobrze. Dziękuję za sugestie.
m4tx

Mmmh, nieważne, są prostsze sposoby. Spróbuję odpowiedzieć poprawnie.
sam hocevar

Czy możesz używać glLogicOp (GL_XOR)? opengl.org/sdk/docs/man/xhtml/glLogicOp.xml
Adam

1
Pamiętaj, że inwersja nie gwarantuje widoczności w całej masie narożnych skrzynek, takich jak nienasycone szarości, i zapewnia słabą widoczność w wielu innych przypadkach.
Lars Viklund,

Odpowiedzi:


16

Szybkim i łatwym sposobem na to jest użycie standardowego równania mieszania z następującymi parametrami:

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

Jeśli srcjest kolorem źródłowym (tym z twojego nowego obiektu) i dstkolorem docelowym (tym, który znajduje się w buforze ramki), obliczy nowy kolor w następujący sposób:

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

Musisz tylko ustawić src = 1, tzn. biały, a otrzymasz odwrotne wideo. Moduł cieniujący fragmenty GLSL będzie:

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

4
Wygląda na to, że znasz mieszanie alfa!
bobobobo
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.