Come invertire il colore del pixel di sfondo


10

Sto scrivendo un editor di giochi e mappe usando Java e jMonkeyEngine. Nell'editor della mappa, ho un pennello fatto da sfera wireframed. Il mio problema è: voglio renderlo visibile ovunque, quindi voglio invertire il colore del pixel "dietro" questo pennello. Volevo farlo con il framment shader (GLSL), ma non so come ottenere il colore di questo pixel.


JMonkeyEngine supporta gli effetti post-process? Probabilmente dovrai andare così.
sam hocevar,

Sì, jMonkeyEngine supporta gli effetti post-process, ma al momento non li conosco molto bene. Grazie per il suggerimento
m4tx,

Mmmh, non importa, ci sono modi più semplici. Proverò a rispondere correttamente.
sam hocevar,

Puoi usare glLogicOp (GL_XOR)? opengl.org/sdk/docs/man/xhtml/glLogicOp.xml
Adam

1
Nota che l'inversione non ti garantisce la visibilità in un sacco di casi angolari, come i grigi insaturi, e fornisce scarsa visibilità per molti altri casi.
Lars Viklund,

Risposte:


15

Il modo rapido e semplice per farlo è utilizzare l'equazione di fusione standard con i seguenti parametri:

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

Se srcè il colore di origine (quello del tuo nuovo oggetto) ed dstè il colore di destinazione (quello che si trova nel framebuffer) calcolerà il nuovo colore come segue:

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

Quindi devi solo impostare src = 1, cioè. bianco e otterrai video inversi. Lo shader di frammenti GLSL sarà:

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

4
Sembra che tu conosca la tua fusione alfa!
bobobobo,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.