मैं हड्डियों / चमड़ी का उपयोग करके एनिमेशन का अभ्यास कर रहा हूं। मैं प्रति शीर्ष पर shader एक मैट्रिक्स भेजने की कोशिश कर रहा हूँ। मैं इन दोनों दृष्टिकोणों के बारे में सोच सकता हूं।
विधि 1
मैं इस तरह से प्रत्येक हड्डी मैट्रिक्स के लिए एक समान संभाल है
u_Bone0 = GLES20.glGetUniformLocation(mProgram, "u_Bone[0]");
u_Bone1 = GLES20.glGetUniformLocation(mProgram, "u_Bone[1]");
और onDraw
मैं उनमें से प्रत्येक को छायादार को भेजता हूं:
GLES20.glUniformMatrix4fv(u_Bone0, 1, false, matrix0, 0);
अगर मेरे पास बड़ी संख्या में मैट्रीस हैं, तो यह स्पष्ट रूप से एक अच्छा तरीका नहीं है। मेरा दूसरा विचार जिसे मैंने अभी तक आज़माया नहीं है क्योंकि रिफ्लेक्टर के लिए बहुत सारे कोड हैं
विधि 2
glUniformMatrix4fv
एक बार में उन सभी को भेजने के लिए उपयोग करना है (मान लें कि मेरे पास 20 मैट्रिसेस हैं)
GLES20.glUniformMatrix4fv(u_Bones, 20, false, matrices, 0);
जहां matrices
है float[16 * 20]
। लेकिन फिर प्रत्येक हड्डियों के लिए मैट्रिक्स को संशोधित करना थोड़ा थकाऊ हो जाता है। उदाहरण के लिए, यदि मैं तीसरा मैट्रिक्स प्राप्त करना चाहता हूं, तो मुझे इसकी तर्ज पर कुछ चाहिए
float[] _3rd = Arrays.copy(matrices, 3*16, 4*16);
और मूल्यों को वापस सहेजना और भी अधिक कष्टप्रद हो सकता है।
मैं अब विधि 1 का उपयोग कर रहा हूं, लेकिन यह बहुत स्मार्ट नहीं दिखता है ...
OpenGL ES 2 shader में कई मैट्रिक्स भेजने का सबसे अच्छा तरीका क्या है?
LE: मैं एंड्रॉइड का उपयोग कर रहा हूं, इसलिए मैं एक जावा समाधान की तलाश कर रहा हूं।