คำถามติดแท็ก blending

5
ฉันจะสร้างเอฟเฟกต์ไฟที่ดีด้วยการผสมอัลฟ่าและอนุภาคได้อย่างไร
การใช้การตั้งค่าต่อไปนี้สำหรับเอฟเฟกต์อนุภาค OpenGL: SRC: GL_SRC_ALPHA DST: GL_ONE สร้างการผสมผสานเพิ่มเติมซึ่งมีลักษณะที่งดงามบนพื้นหลังสีดำ แต่น่ากลัวในสีที่สว่างกว่าเพราะมันเริ่มจางลงเป็นสีขาว จากนั้นฉันก็ใช้การผสมอัลฟา: SRC: GL_SRC_ALPHA DST: GL_ONE_MINUS_SRC_ALPHA สิ่งนี้ทำให้พื้นหลังอื่น ๆ สามารถใช้งานได้โดยไม่ส่งผลกระทบต่อสีของอนุภาค แต่อนุภาคเหล่านั้นดูหมองคล้ำเมื่อเปรียบเทียบกับการผสมผสานแบบเติมแต่ง ฉันจะสร้างเอฟเฟกต์ไฟที่ดีด้วยการผสมอัลฟ่าและอนุภาคได้อย่างไร สารเติมแต่ง: อัลฟา: UPDATE: ตามคำแนะนำของเดวิดด้านล่างฉันสร้างพื้นผิวแยกต่างหากจากนั้นใช้การผสมผสานแบบเติมต่อเอฟเฟกต์ของอนุภาคก่อนที่จะวาดลงบนพื้นผิว ปัญหาที่เกิดขึ้นก็คือการวาดภาพบนพื้นผิว alpha = 0 ส่งผลให้ชิ้นส่วนที่เป็นสีของอนุภาคปรากฏขึ้นด้านหน้าแผนที่โลกของฉันเนื่องจากโดยปกติคุณมีพื้นหลังสีดำแทน เคล็ดลับคือใช้พื้นผิวสองแบบ ฉันสร้างพื้นผิวสีดำแล้วดึงอนุภาคบนมัน จากนั้นฉันก็ลบชั้นอัลฟ่าของอนุภาคออกจากพื้นผิวนี้ทำการลบสิ่งที่เป็นของแข็งสีดำรอบ ๆ และลบล้างอนุภาคที่มองเห็นได้บางส่วนในขณะที่ปล่อยให้สีดำพื้นฐานที่คุณคาดหวัง ในระยะสั้นเป็นกระบวนการที่ทรหด แต่ในที่สุดก็มาถึง: นี่คือกระทู้ที่ฉันโพสต์กระบวนการของฉัน: http://www.cocos2d-iphone.org/forum/topic/28707?replies=8#post-141528 วิดีโอ: http://www.youtube.com/watch?v=JptGbEO3b5E

2
วิธีการผสมอัลฟาเข้ากับฉาก 3 มิติที่ซับซ้อนได้อย่างถูกต้อง?
ฉันรู้ว่าคำถามนี้อาจฟังดูง่ายที่จะตอบ แต่มันทำให้ฉันบ้า มีสถานการณ์ที่เป็นไปได้มากเกินไปที่กลไกการผสมอัลฟาที่ดีควรจัดการและสำหรับอัลกอริทึมแต่ละอันที่ฉันคิดว่ามีบางอย่างขาดหายไป นี่เป็นวิธีการที่ฉันคิดมาจนถึงตอนนี้: ครั้งแรกของฉันแม้ว่าเกี่ยวกับการจัดเรียงวัตถุตามความลึก แต่สิ่งนี้ล้มเหลวเนื่องจากวัตถุไม่ใช่รูปร่างที่เรียบง่ายพวกเขาอาจมีส่วนโค้งและอาจวนซ้ำภายในกัน ดังนั้นฉันจึงไม่สามารถบอกได้เสมอว่ากล้องตัวไหนอยู่ใกล้กล้องมากขึ้น จากนั้นฉันคิดเกี่ยวกับการเรียงลำดับสามเหลี่ยม แต่อันนี้ก็อาจล้มเหลวด้วยฉันคิดว่าฉันไม่แน่ใจว่าจะใช้งานได้อย่างไรมีกรณีที่หายากซึ่งอาจทำให้เกิดปัญหาอีกครั้งซึ่งสามเหลี่ยมสองรูปผ่านกัน ไม่มีใครสามารถบอกได้ว่าใครอยู่ใกล้ สิ่งต่อไปคือการใช้บัฟเฟอร์ความลึกอย่างน้อยเหตุผลหลักที่เรามีบัฟเฟอร์ความลึกเป็นเพราะปัญหาเกี่ยวกับการเรียงลำดับที่ฉันกล่าวถึง แต่ตอนนี้เราได้รับปัญหาอื่น เนื่องจากวัตถุที่อาจจะมีความโปร่งใสใน pixel เดียวอาจจะมีมากขึ้นกว่าหนึ่งในวัตถุที่มองเห็น ดังนั้นวัตถุใดที่ฉันควรเก็บความลึกของพิกเซล? ฉันคิดว่าบางทีฉันสามารถเก็บความลึกของวัตถุด้านหน้าได้มากที่สุดเท่านั้นและการใช้นั้นเป็นตัวกำหนดว่าฉันควรผสมผสานการโทรในครั้งต่อไปที่พิกเซลนั้นได้อย่างไร แต่อีกครั้งมีปัญหาลองคิดถึงระนาบกึ่งโปร่งใสสองระนาบโดยมีระนาบทึบอยู่ตรงกลาง ฉันจะแสดงระนาบที่เป็นของแข็งในตอนท้ายเราสามารถเห็นระนาบที่ห่างไกลที่สุด โปรดทราบว่าฉันจะรวมทุก ๆ สองระนาบจนกว่าจะเหลือเพียงสีเดียวสำหรับพิกเซลนั้น เห็นได้ชัดว่าฉันสามารถใช้วิธีการเรียงลำดับเช่นกันเพราะเหตุผลเดียวกันกับที่ฉันอธิบายไว้ข้างต้น ในที่สุดสิ่งเดียวที่ฉันจินตนาการได้ว่าสามารถทำงานได้คือการแสดงวัตถุทั้งหมดเป็นเป้าหมายการแสดงผลที่แตกต่างกันจากนั้นเรียงลำดับเลเยอร์เหล่านั้นและแสดงผลลัพธ์สุดท้าย แต่ครั้งนี้ฉันไม่รู้ว่าฉันจะใช้อัลกอริทึมนี้ได้อย่างไร
11 3d  blending 

2
ฉันจะใช้การทดสอบเชิงลึกและความโปร่งใสของพื้นผิวร่วมกันในโลก 2.5D ของฉันได้อย่างไร
หมายเหตุ:ฉันได้พบคำตอบแล้ว (ซึ่งฉันจะโพสต์หลังจากคำถามนี้) - ฉันแค่สงสัยว่าฉันทำถูกหรือว่ามีวิธีที่ดีกว่า ฉันสร้างเกมภาพสามมิติ "2.5D" โดยใช้ OpenGL ES (JOGL) โดย "2.5D" ฉันหมายความว่าโลกนี้เป็น 3D แต่มันถูกสร้างการแสดงผลโดยใช้แผ่นกระเบื้องสามมิติแบบสองมิติ ปัญหาเดิมที่ฉันต้องแก้ไขก็คือพื้นผิวของฉันจะต้องแสดงผลตามลำดับ (จากด้านหลังไปข้างหน้า) เพื่อให้กระเบื้องซ้อนทับอย่างถูกต้องเพื่อสร้างผลที่เหมาะสม หลังจากอ่านเสร็จฉันก็รู้ได้ทันทีว่านี่เป็นวิธี 2D "หมวกเก่า" เรื่องนี้กลายเป็นเรื่องยากที่จะทำอย่างมีประสิทธิภาพเนื่องจากผู้เล่นสามารถปรับเปลี่ยนโลก 3 มิติ (ดังนั้นสิ่งต่างๆสามารถปรากฏที่ใดก็ได้ในพื้นที่ 3 มิติ) - ดูเหมือนว่าฉันใช้ประโยชน์จากบัฟเฟอร์ความลึก นั่นหมายความว่าฉันไม่ต้องกังวลกับการแสดงสิ่งต่าง ๆ ในลำดับที่ถูกต้อง อย่างไรก็ตามฉันประสบปัญหา หากคุณใช้GL_DEPTH_TESTและGL_BLENDร่วมกันมันจะสร้างเอฟเฟกต์ที่วัตถุจะถูกผสมกับพื้นหลังก่อนที่จะ "เรียงลำดับ" ตามลำดับ z (หมายความว่าคุณได้รับการทับซ้อนแบบแปลก ๆ ที่ควรมีความโปร่งใส) นี่คือรหัสหลอกที่ควรแสดงให้เห็นถึงปัญหา (โดยบังเอิญฉันใช้ libgdx สำหรับ Android) create() { // ... // …

1
ผสมผสานโหมดใน Cocos2D ด้วย glBlendFunc
เราพยายามทำซ้ำโหมดการผสมที่พบบ่อยที่สุดที่มีอยู่ใน Photoshop และ Quartz 2D แต่เราได้มากับ 3 เท่านั้นและหลังจากการค้นหาออนไลน์นาน ๆ สำหรับผู้ที่สนใจนี่คือ: คูณ = GL_DST_COLOR, GL_ONE_MINUS_SRC_ALPHA หน้าจอ = GL_MINUS_DST_COLOR, GL_ONE Linear Dodge = GL_ONE, GL_ONE คุณสามารถลองโหมดเหล่านี้และโหมดอื่น ๆ แบบออนไลน์ได้ที่เว็บไซต์ที่มีประโยชน์มากนี้: http://www.andersriggelsen.dk/glblendfunc.php ตอนนี้เราจะขอบคุณถ้าใครสามารถให้โหมดการผสมเพิ่มเติมที่เราสามารถสร้างขึ้นใหม่ใน Cocos2D เนื่องจากประสบการณ์ Open GL ของเรานั้น จำกัด จริงๆ ขอบคุณล่วงหน้า! Argiris
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.