เทพดาแผ่นด้วยวัตถุบัฟเฟอร์และเฉดสี


9

วิธี "ที่ดีที่สุด" ในการจัดการแผ่นสไปรต์ด้วยเครื่องเคลือบเงาและบัฟเฟอร์คืออะไร ในโหมดทันทีมันเป็นเรื่องง่ายที่จะแก้ไข texcoords ของสไปรต์เมื่อวาด แต่ฉันไม่รู้ว่าจะทำอย่างไรกับ opengl ที่ทันสมัย ฉันควรเก็บเท็กซัสทั้งหมดในบัฟเฟอร์และเปลี่ยนพอยน์เตอร์สำหรับสไปรต์ทุกอันหรือมีวิธีที่ดีกว่านี้หรือไม่?

คำตอบ:


11

คุณสามารถสร้างบัฟเฟอร์ looong "vertex; texcoord" ซ้ำได้ และเพียงแค่ใช้ดัชนีตามที่คุณพูด มันง่ายที่สุดและเป็นไปได้คล้ายกับสิ่งที่คุณรู้

ถ้าคุณต้องการที่จะบันทึกหน่วยความจำบางส่วน มีวิธีแก้ปัญหาที่เรียบร้อยและมีสไปรต์หนึ่งบัฟเฟอร์ด้วย unite texcoords และสร้างเมทริกซ์การแปลง UV และส่งไปที่ shader และ texcoords คูณด้วย (ใน shader ที่จุดสุดยอด)

คุณไม่จำเป็นต้องสร้างเมทริกซ์ด้วยตัวเองถ้าคุณไม่สบายใจ คุณสามารถใช้ฟังก์ชัน GL ปกติและอ่านเมทริกซ์กับglGetFloatvฟังก์ชัน แบบนี้:

glGetFloatv (GL_MODELVIEW_MATRIX ,&g_TexCoordMat);

ฉันสร้างภาพเพื่ออธิบายได้ดีขึ้น glTranslate ang glScale สามารถดูได้ว่าพวกมันกำลังเคลื่อนที่โดยใช้พื้นที่รังสียูวี

UVs Spritesheet

หากคุณไม่ทราบวิธีการส่งเมทริกซ์ไปยัง shader ฉันสามารถแบ่งปันรหัสกับคุณได้

แก้ไข:เพิ่มรูปภาพ
(แหล่งที่มาสำหรับ spritesheet i ที่ใช้: funorb.com )


ว้าวขอบคุณ! คำตอบที่สมบูรณ์แบบ ฉันชอบโซลูชันนี้มากและจะตรวจดูในไม่ช้าเมื่อฉันกลับมาทำงาน :-) ถ้าฉันติดฉันจะรบกวนคุณด้วยคำถามเพิ่มเติม
uggwar

สิ่งนี้เท่าที่ฉันเห็นสามารถสร้างการเรียกแบบดึงหนึ่งครั้งสำหรับแต่ละสไปรต์ มีวิธีการแบทช์สไปรต์เหล่านี้เพื่อการใช้งานที่ราบรื่นขึ้นหรือไม่?
uggwar

@uggwar การวาดแบบอินสแตนซ์?
Notabene
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.