วิธีการเปลี่ยนสีของพิกเซลพื้นหลัง


10

ฉันกำลังเขียนเกมและแก้ไขแผนที่โดยใช้ Java และ jMonkeyEngine ในเครื่องมือแก้ไขแผนที่ฉันมีแปรงทำโดย wireframed sphere ปัญหาของฉันคือ: ฉันต้องการให้มันปรากฏทุกที่ดังนั้นฉันต้องการกลับสีของพิกเซล "หลัง" แปรงนี้ ฉันอยากจะทำมันด้วย fragment shader (GLSL) แต่ฉันไม่รู้วิธีรับสีของพิกเซลนี้


jMonkeyEngine รองรับเอฟเฟกต์หลังกระบวนการหรือไม่ คุณอาจจะต้องไปทางนี้
sam hocevar

ใช่ jMonkeyEngine รองรับเอฟเฟ็กต์หลังกระบวนการ แต่ตอนนี้ฉันยังไม่คุ้นเคยกับมัน ขอบคุณสำหรับคำแนะนำ
m4tx

Mmmh ไม่เป็นไรมีวิธีที่ง่ายกว่า ฉันจะพยายามตอบให้ถูกต้อง
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เป็นสีปลายทาง (สีที่อยู่ใน framebuffer) มันจะคำนวณสีใหม่ดังนี้:

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.