สีผสมไม่ถูกต้องใน OpenGL ES

ฉันกำลังพยายามแสดงวงกลม 2 วง (สีอ่อน) ใน OpenGL ES ในแบบ 2 มิติ ตรงกลางเป็นสีขาว ขอบเป็นสีดำ มันทำงานได้ดีตราบใดที่มันไม่ทับซ้อนกัน:

ป้อนคำอธิบายรูปภาพที่นี่

แต่ทันทีที่พวกเขาทำฉันก็ได้รับสิ่งประดิษฐ์นี้:

ป้อนคำอธิบายรูปภาพที่นี่

ฉันใช้ glBlendFunc(GL_ONE, GL_ONE) โดยเปิดใช้งานการผสมแน่นอน

อะไรทำให้เกิดสิ่งนี้? มีวิธีแก้ไขหรือไม่?

ฉันอยากให้พวกเขาผสมผสานกันมากกว่านี้:

ป้อนคำอธิบายรูปภาพที่นี่

ขอบคุณ!


person DrummerB    schedule 05.08.2012    source แหล่งที่มา


คำตอบ (2)


ปัจจุบันวงกลมของคุณมีการไล่ระดับสีเชิงเส้นหรือไม่ คุณอาจได้รับอาร์ติแฟกต์น้อยลงหากคุณมีเส้นโค้งที่แตกต่างออกไป

จากตัวอย่างของคุณ ดูเหมือนว่าคุณต้องการความเข้มสูงสุดของวงกลมทั้งสอง ไม่ใช่ผลรวมของความเข้ม ดูเหมือนว่าการใช้งาน OpenGL ES 2.0 ของ Apple รองรับส่วนขยาย EXT_blend_minmax ซึ่งช่วยให้ คุณระบุว่าค่าแฟรกเมนต์ผลลัพธ์ควรเป็นค่าสูงสุดของค่าขาเข้าและค่าที่มีอยู่ อาจจะลองอย่างนั้นเหรอ?

person Jesse Rusak    schedule 05.08.2012
comment
ใช่ ฉันใช้การไล่ระดับสีเชิงเส้น ฉันจะลองอันอื่น - person DrummerB; 05.08.2012
comment
@DrummerB ฉันได้เพิ่มข้อเสนอแนะอื่น ปรากฎว่าเป็นไปได้สูงสุด อย่างน้อยก็ต้องมีส่วนขยาย - person Jesse Rusak; 05.08.2012

ผลลัพธ์ที่คุณเห็นคือสิ่งที่ควรจะได้จากการไล่ระดับสีเชิงเส้น คำแนะนำ: เปิด Photoshop หรือ GIMP วาดการไล่ระดับสีแบบรัศมีสองแบบเป็นสองเลเยอร์ และตั้งค่าเป็นโหมดการผสม "เพิ่มเติม" มันจะดูเหมือนภาพของคุณทุกประการ

ให้เอฟเฟกต์ตามที่คุณต้องการด้วยการไล่ระดับสีแบบสี่เหลี่ยม หากการไล่ระดับสีของคุณอยู่ในช่วง 0…1 ให้นำค่ากำลังสองแล้ววาดสิ่งนี้ คุณสามารถใช้ sqrt ในภายหลังได้หากต้องการทำให้การไล่ระดับสีเดี่ยวเป็นเส้นตรง

ไม่ใช่ว่านี่เป็นสิ่งที่ทำได้ยากโดยใช้ขั้นตอนการผสม สามารถทำได้โดยใช้การส่งหลายรอบ แต่จริงๆ แล้ว จะตรงไปตรงมามากกว่าถ้าใช้เชเดอร์เพื่อรวมการส่งผ่านจาก FBO สองตัว

person datenwolf    schedule 05.08.2012