ฉันกำลังพัฒนาเป็น 2D เกมเครื่องยนต์ที่จะสนับสนุน 3 มิติอยู่ในอนาคต อยู่ในปัจจุบันปั่นป่วนเท่าเรื่องของพัฒนาการ,ฉันทำงานกับการประมวลผลกลุ่มภาพววาดและประมวลผล. เป็นคนของคุณอาจจะรู้มั้ยตอนที่ batching กราฟิกด้วยกัน,เครื่องแบสนับสนุนสำหรับสี(RGBA),พิกัดพื้นผิว,หมายเลขพื้นผิว(พื้นผิวดัชนี),และแบบการเปลี่ยนแปลงเมตริกซ์ไปออกไปนอกหน้าต่างแต่ว่าแทนที่จะเป็นผ่านไปผ่านทางเวอร์เท็กซ์บัฟเฟอร์. ตอนนี้ฉันต้องการจัดเตรียมไว้ฆ่านางแบบเป็นตำแหน่ง,สีพิกัดและเนื้อตัวกันที่เวอร์เท็กซ์บัฟเฟอร์. ของเวอร์เท็กซ์เว้นรูปแบบดูเหมือนนี้ตอนนี้:
float* v0 = {x, y, r, g, b, a, u, v, textureID};
float* v1 = {x, y, r, g, b, a, u, v, textureID};
float* v2 = {x, y, r, g, b, a, u, v, textureID};
float* v3 = {x, y, r, g, b, a, u, v, textureID};
ผมกำลังจะ integrate กำลังคำนวณอยู่ที่ไหนสิ่งควรจะอยู่ในโลกอวกาศโดยใช้การเปลี่ยแปลงครั้งย่าให้เขาไปถึงตัวออฟติมัส นี่เป็นทางฉันเพื่อถามคำถาม:
ควรอการเปลี่ยนแปรงเมตริกซ์เป็น multiplied โดยรุ่นของเวอร์เท็กซ์ตำแหน่งบนหน่วยประมวลผลหรือตัวประมวลผลกราฟิก?
บางอย่างเพื่อให้อยู่ในใจคือถ้าฉันผ่านมันไปที่บัฟเฟอร์เวอร์เท็กซ์,ฉันมีความจำเป้นที่จะต้องการอัปโหลดการเปลี่ยนแปรงเมตริกซ์ครั้งต่อเวอร์เท็กซ์(4 ครั้งต่อ sprite)ซึ่งฉันดูเหมือนเป็นเสียหน่วยความจำจนหมดแล้ว อีกด้านนึง multiplying คนรุ่นของเวอร์เท็กซ์ตำแหน่งโดยการเปลี่ยนแปรงเมตริกซ์ว่างในหน่วยประมวลผลดูเหมือนว่ามันคงจะช้ากว่างเปรียบเทียบกับตัวประมวลผลกราฟิกขอ concurrency ความสามารถในการ.
นี่คือวิธีของเวอร์เท็กซ์เว้นรูปแบบจะดูเหมือนถ้าผมคำนวณกลายร่างในตัวประมวลผลกราฟิก:
float* v0 = {x, y, r, g, b, a, u, v, textureID, m0, m1, m2, m3, m4, m5, m6, m7, m8, m9, m10, m11, m12, m13, m14, m15};
float* v1 = {x, y, r, g, b, a, u, v, textureID, m0, m1, m2, m3, m4, m5, m6, m7, m8, m9, m10, m11, m12, m13, m14, m15};
float* v2 = {x, y, r, g, b, a, u, v, textureID, m0, m1, m2, m3, m4, m5, m6, m7, m8, m9, m10, m11, m12, m13, m14, m15};
float* v3 = {x, y, r, g, b, a, u, v, textureID, m0, m1, m2, m3, m4, m5, m6, m7, m8, m9, m10, m11, m12, m13, m14, m15};
คำถามคือส่วนใหญ่ตามทฤษฎีแล้วแรงผลักดัน ดังนั้นเป็นทฤษฎีนั้นและทางเทคนิคตอบฉันได้จะเป็นเกียรติอย่างยิ่ง แต่สำหรับอ้างอิงถึง,นี่เป็นรหัสมอส