Cara membalikkan warna piksel latar belakang


10

Saya sedang menulis game dan editor peta menggunakan Java dan jMonkeyEngine. Di editor peta, saya mendapat sikat yang dilakukan oleh wireframed sphere. Masalah saya adalah: Saya ingin membuatnya terlihat di mana-mana, jadi saya ingin membalikkan warna piksel "di belakang" kuas ini. Saya ingin melakukannya dengan fragment shader (GLSL), tapi saya tidak tahu cara mendapatkan warna dari piksel ini.


Apakah jMonkeyEngine mendukung efek pasca-proses? Anda mungkin harus pergi dengan cara ini.
sam hocevar

Ya, jMonkeyEngine mendukung efek pasca-proses, tapi saya tidak terlalu mengenalnya saat ini. Terima kasih atas sarannya.
m4tx

Mmmh, tidak apa-apa, ada cara yang lebih sederhana. Saya akan mencoba menjawab dengan benar.
sam hocevar

Bisakah Anda menggunakan glLogicOp (GL_XOR)? opengl.org/sdk/docs/man/xhtml/glLogicOp.xml
Adam

1
Perhatikan bahwa inversi tidak menjamin visibilitas Anda dalam sejumlah besar kasus sudut, seperti abu-abu tidak jenuh, dan memberikan visibilitas yang buruk untuk banyak kasus lainnya.
Lars Viklund

Jawaban:


15

Cara cepat dan mudah untuk melakukan ini adalah dengan menggunakan persamaan pencampuran standar dengan parameter berikut:

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

Jika srcadalah warna sumber (yang dari objek baru Anda) dan dstmerupakan warna tujuan (yang ada di framebuffer) itu akan menghitung warna baru sebagai berikut:

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

Jadi, Anda hanya perlu mengatur src = 1, yaitu. putih, dan Anda akan mendapatkan video terbalik. Shader fragmen GLSL akan:

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

4
Kedengarannya seperti Anda tahu alpha blending Anda!
bobobobo
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.