ฉันกำลังฝึกอนิเมชั่นโดยใช้กระดูก / สกินนิ่ง ฉันกำลังพยายามส่งเมทริกซ์หนึ่งส่วนต่อจุดยอด ฉันนึกถึงสองแนวทางนี้
วิธีที่ 1
ฉันมีมือจับอันเดียวสำหรับเมทริกซ์กระดูกแต่ละอันเช่นนี้
u_Bone0 = GLES20.glGetUniformLocation(mProgram, "u_Bone[0]");
u_Bone1 = GLES20.glGetUniformLocation(mProgram, "u_Bone[1]");
และในการที่onDraw
ฉันส่งแต่ละคนไปยัง shader:
GLES20.glUniformMatrix4fv(u_Bone0, 1, false, matrix0, 0);
เห็นได้ชัดว่านี่ไม่ใช่วิธีที่ดีถ้าฉันมีเมทริกซ์จำนวนมาก ความคิดที่สองของฉันที่ฉันยังไม่ได้ลองเนื่องจากมีโค้ดจำนวนมากสำหรับการปรับโครงสร้าง
วิธีที่ 2
คือการใช้glUniformMatrix4fv
เพื่อส่งพวกเขาทั้งหมดในครั้งเดียว (สมมติว่าฉันมี 20 เมทริกซ์)
GLES20.glUniformMatrix4fv(u_Bones, 20, false, matrices, 0);
ที่เป็นmatrices
float[16 * 20]
แต่จากนั้นการปรับเปลี่ยนเมทริกซ์สำหรับแต่ละกระดูกจะค่อนข้างน่าเบื่อ ตัวอย่างเช่นถ้าฉันต้องการหาเมทริกซ์ที่ 3 ฉันต้องการบางสิ่งตามแนวของ
float[] _3rd = Arrays.copy(matrices, 3*16, 4*16);
และการประหยัดกลับคืนค่าสามารถเป็นที่น่ารำคาญยิ่งขึ้น
ฉันใช้วิธีที่ 1 ตอนนี้ แต่มันไม่ได้ดูฉลาดมาก ...
วิธีที่ดีที่สุดในการส่งเมทริกซ์หลายตัวไปยัง OpenGL ES 2 shader คืออะไร?
LE: ฉันใช้ Android ดังนั้นฉันกำลังมองหาโซลูชัน Java