คำถามติดแท็ก depth-buffer

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

2
ใน OpenGL ฉันจะค้นหาช่วงความลึกของบัฟเฟอร์ความลึกได้อย่างไร
ฉันกำลังใช้งานแอพพลิเคชั่นการแสดงผลหลายรอบ GL สำหรับ iOS ครั้งแรกที่ส่งผ่านไปยังพื้นผิวบัฟเฟอร์ความลึก การผ่านครั้งที่สองใช้ค่าในบัฟเฟอร์ความลึกเพื่อควบคุมแอปพลิเคชันของตัวแยกส่วน ฉันต้องการ rescale ค่าใน buffer ความลึกเพื่อสิ่งที่มีประโยชน์ แต่ก่อนที่ฉันสามารถทำได้ฉันจำเป็นต้องรู้ช่วงค่าความลึกของค่าความลึกของบัฟเฟอร์ ฉันจะทำสิ่งนี้ได้อย่างไร

1
การแก้ไขความลึกสำหรับบัฟเฟอร์ z กับ scanline
ฉันต้องเขียนซอฟต์แวร์ 3d rasterizer ของตัวเองและจนถึงตอนนี้ฉันสามารถฉายโมเดล 3 มิติของฉันที่สร้างจากรูปสามเหลี่ยมลงในพื้นที่ 2d: ฉันหมุนแปลและฉายจุดเพื่อให้ได้พื้นที่ 2 มิติของสามเหลี่ยมแต่ละอัน จากนั้นฉันใช้จุดสามเหลี่ยม 3 จุดและใช้อัลกอริธึม scanline (โดยใช้การแก้ไขเชิงเส้น) เพื่อค้นหาทุกจุด [x] [y] ตามขอบ (ซ้ายและขวา) ของรูปสามเหลี่ยมเพื่อให้ฉันสามารถสแกนสามเหลี่ยมในแนวนอนได้ เรียงต่อกันแล้วเติมด้วยพิกเซล วิธีนี้ใช้ได้ผล ยกเว้นฉันต้องใช้ z-buffering ด้วย ซึ่งหมายความว่าการรู้พิกัด z ที่หมุนและแปลของจุดยอด 3 จุดของรูปสามเหลี่ยมฉันต้องแก้ไขพิกัด z สำหรับจุดอื่น ๆ ทั้งหมดที่ฉันพบด้วยอัลกอริทึมสแกนไลน์ของฉัน แนวคิดดูเหมือนชัดเจนพอแรกพบ Za และ Zb ด้วยการคำนวณเหล่านี้: var Z_Slope = (bottom_point_z - top_point_z) / (bottom_point_y - top_point_y); …

1
สิ่งที่จะเป็นตัวกรองที่ดีในการสร้าง 'แม่เหล็ก deformers' จากแผนที่เชิงลึก?
ในโครงการของฉันฉันกำลังสร้างระบบสำหรับการเปลี่ยนรูปแบบตาข่ายที่มีรายละเอียดสูง (เสื้อผ้า) เพื่อให้พอดีกับตาข่ายนูน ในการทำเช่นนี้ฉันใช้แผนที่ความลึกของรายการและ 'ฮัลล์' เพื่อพิจารณาว่าจุดใดในอวกาศโลกที่เกิดการเบี่ยงเบนและขอบเขต เพียงแค่เปลี่ยนจุดยอดที่เกิดขึ้นทั้งหมดให้เป็นความลึกตามที่กำหนดโดย 'ฮัลล์' นั้นมีประสิทธิภาพพอสมควรและมีประสิทธิภาพที่ดี แต่มันประสบปัญหาในการไม่รักษาคุณสมบัติของตาข่ายและต้องการการคัดที่กว้างขวางเพื่อหลีกเลี่ยง ฉันต้องการสร้างจากแผนที่เบี่ยงเบนเชิงลึกชุด 'deformers' ที่เรียบง่ายซึ่งจะ 'ดัน' * จุดยอดทั้งหมดของตาข่ายที่ผิดรูปออกไปด้านนอก (ในอวกาศโลก) ด้วยวิธีนี้คุณสมบัติทั้งหมดของตาข่ายจะได้รับการเก็บรักษาไว้และไม่จำเป็นต้องมีฮิวริสติกแบบซับซ้อนเพื่อกำจัดจุดยอดที่ไม่เหมาะสม ฉันไม่แน่ใจว่าจะทำอย่างไรเกี่ยวกับการสร้างชุด deformer นี้ ฉันจินตนาการถึงบางสิ่งบางอย่างเช่นอัลกอริทึมที่พยายามจับคู่พื้นผิวทรงกลมกับแต่ละส่วนของการเบี่ยงเบนที่ต่อเนื่องกันในช่วงที่กำหนด แต่ไม่รู้ว่าจะเริ่มทำสิ่งนี้ได้ที่ไหน ใครสามารถแนะนำตัวกรองหรืออัลกอริทึมที่เหมาะสมสำหรับการสร้างตัวเปลี่ยนรูป? หรือจะใช้วิธีการ 'บีบอัด' แผนที่เชิงลึกอีกวิธีหนึ่ง (* กดเนื่องจากการปรับให้พอดีกับรูปร่างมนุษย์นูน 'ดังนั้น' การแปลงมีแนวโน้มที่จะเป็น 'ทรงกลม' จากมุมมองของพื้นผิว) แก้ไข:นี่คือภาพ / แผนภาพแนะนำอย่างถูกต้องที่แสดงให้เห็นถึงสิ่งที่ฉันพยายามที่จะบรรลุ นอกจากนี้ฉันควรพูดตั้งแต่คำถามนี้ถูกโพสต์ฉันทำงานมากขึ้นเกี่ยวกับปัญหานี้และแม้ว่าฉันไม่เคยแก้ไขวิธีการรับ deformers ที่ฉันได้ในที่สุดตัดสินใจว่าแผนที่เชิงลึกสำหรับสิ่งนี้ไม่เหมาะสมเป็น: หากตาข่ายที่ผิดรูปไม่สมบูรณ์เป็นไปได้ที่จะรับข้อความในแผนที่ที่มีความหมายว่าอยู่อีกด้านหนึ่งของตาข่ายนูน (เพราะไม่ถูกบดบังโดยผู้ที่อยู่ใกล้กับกล้องในด้านที่ถูกต้อง) ประสิทธิภาพไม่สูงอย่างที่ฉันหวังไว้เพราะต้องการแผนที่ 6 แผนที่ต่อการเปลี่ยนรูป ไม่ใช่ว่าสิ่งเหล่านี้จะแก้ไม่ตก แต่โซลูชันอื่น ๆ ซึ่งเกี่ยวข้องกับการทดสอบการชนกันของเมล็ดที่ทำงานบน GPU ทำให้ได้ผลลัพธ์ที่มีคุณภาพสูงกว่าและง่ายกว่ามากแม้ว่ามันอาจจะไม่เร็วก็ตาม …

4
การแมปเงาและ Quads โปร่งใส
การแมปเงาใช้บัฟเฟอร์ความลึกเพื่อคำนวณตำแหน่งที่ควรวาดเงา ปัญหาของฉันคือฉันต้องการล่ามที่มีพื้นผิวกึ่งโปร่งใสบางส่วนเพื่อฉายเงา - ตัวอย่างเช่นต้นไม้ป้ายโฆษณา เนื่องจากค่าความลึกจะถูกตั้งค่าในทุกส่วนของรูปสี่เหลี่ยมและไม่ใช่เฉพาะส่วนที่มองเห็นได้เท่านั้นมันจะสร้างเงารูปสี่เหลี่ยมซึ่งไม่ใช่สิ่งที่ฉันต้องการ ฉันจะทำให้ quads โปร่งใสของฉันส่งเงาที่ถูกต้องโดยใช้การทำแผนที่เงาได้อย่างไร

3
การใช้ความละเอียดบัฟเฟอร์ความลึกเต็มรูปแบบสำหรับการแสดงผล 2D
ฉันกำลังทำงานกับโหมดแสดงภาพแบบด้านหน้าไปด้านหลังสำหรับเครื่องยนต์ 2D โดยใช้การฉายภาพแบบออโธกราฟฟิค ฉันต้องการใช้บัฟเฟอร์ความลึกเพื่อหลีกเลี่ยงการถอนเงินมากเกินไป ฉันมีบัฟเฟอร์ความลึก 16 บิตกล้องที่ Z = 100 ดูที่ Z = 0, z ใกล้เคียงคือ 1 และ zFar คือ 1,000 แต่ละสไปรต์ที่แสดงผลจะตั้งค่าพิกัด Z ของมันเป็นค่าที่ห่างไกลมากขึ้น อะไรก็ตามที่อยู่ด้านล่าง อย่างไรก็ตามฉันทราบวิธีการที่ตำแหน่ง Z ลงท้ายด้วยค่าบัฟเฟอร์ Z คือไม่ใช่เชิงเส้น ฉันต้องการใช้ความละเอียดเต็มรูปแบบของบัฟเฟอร์ความลึก 16 บิตนั่นคืออนุญาตให้มีค่าที่ไม่ซ้ำกัน 65536 ชิ้น ดังนั้นสำหรับทุก sprite ที่เรนเดอร์ฉันต้องการเพิ่มตำแหน่ง Z ไปยังตำแหน่งถัดไปเพื่อให้สัมพันธ์กับค่าบัฟเฟอร์ความลึกที่ไม่ซ้ำกันถัดไป กล่าวอีกนัยหนึ่งฉันต้องการเปลี่ยนดัชนีที่เพิ่มขึ้น (0, 1, 2, 3 ... ) ของสไปรต์ที่ถูกดึงเข้าไปในตำแหน่ง Z ที่เหมาะสมสำหรับแต่ละสไปรต์เพื่อให้มีค่าบัฟเฟอร์ความลึกที่ไม่ซ้ำกัน …
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.