मैं अपना खुद का कोलाडा आयातक लिखने पर काम कर रहा हूं। मैं बहुत दूर मिल गया है, मेष और सामग्री लोड हो रहा है और इस तरह। लेकिन मैंने एनीमेशन पर एक झटका मारा है, विशेष रूप से: संयुक्त घूर्णन।कोलाडा: गलत जगह में उलटा बंधन?
सूत्र मैं अपने meshes skinning के लिए उपयोग कर रहा हूँ सीधी-सपाट है:
weighted;
for (i = 0; i < joint_influences; i++)
{
weighted +=
joint[joint_index[i]]->parent->local_matrix *
joint[joint_index[i]]->local_matrix *
skin->inverse_bind_pose[joint_index[i]] *
position *
skin->weight[j];
}
position = weighted;
और जहाँ तक साहित्य का संबंध है, यह सही तरीका है। अब, कोलाडा जोड़ों के लिए दो प्रकार के घूर्णन निर्दिष्ट करता है: स्थानीय और वैश्विक। संयुक्त के लिए स्थानीय परिवर्तन प्राप्त करने के लिए आपको घूर्णन को एकसाथ जोड़ना होगा।
संयुक्त रूप से स्थानीय घूर्णन और संयुक्त के वैश्विक घूर्णन के बीच कोलाडा दस्तावेज़ क्या अंतर नहीं करता है। लेकिन मैंने देखा है कि अधिकांश मॉडलों में, रोटेशन में rotate
(वैश्विक) या jointOrient
(स्थानीय) की आईडी हो सकती है।
जब मैं वैश्विक घूर्णन की अवहेलना करता हूं और केवल स्थानीय लोगों का उपयोग करता हूं, तो मुझे मॉडल के लिए बाध्यता मिलती है। लेकिन जब मैं संयुक्त स्थानीय परिवर्तन में वैश्विक घूर्णन जोड़ता हूं, तो अजीब चीजें होने लगती हैं।
यह वैश्विक रोटेशन का उपयोग किए बिना है:
और यह वैश्विक रोटेशन के साथ है:
दोनों स्क्रीनशॉट मैं कंकाल लाइनों का उपयोग कर ड्राइंग कर रहा हूँ में, लेकिन में सबसे पहले यह अदृश्य है क्योंकि जोड़ जाल के अंदर हैं। दूसरे स्क्रीनशॉट में शिखर सभी जगह पर हैं!
यह देखना कठिन है, लेकिन आप देख सकते हैं कि जोड़ों दूसरा स्क्रीनशॉट में सही स्थिति में हैं:
तुलना के लिए, यह है कि क्या दूसरा स्क्रीनशॉट की तरह दिखना चाहिए है।
लेकिन अब अजीब बात है। अगर मैं उलटा बाँध उपेक्षा मुद्रा के रूप में कोलाडा द्वारा निर्दिष्ट और इसके बजाय संयुक्त के माता-पिता का प्रतिलोम ले स्थानीय बार संयुक्त के स्थानीय बदलना बदलना, मैं निम्नलिखित हो:
इस स्क्रीनशॉट में मैं एक ड्राइंग कर रहा हूँ प्रत्येक कशेरुक से जोड़ों के लिए जोड़ों के लिए लाइन। तथ्य यह है कि मैं बाँध मिल मुद्रा क्योंकि सूत्र अब हो जाता है, तो अजीब नहीं है:
world_matrix * inverse_world_matrix * position * weight
लेकिन यह मेरे लिए सुराग पर शक करने के कोलाडा का उलटा बाँध मुद्रा है कि गलत स्थान में है।
तो मेरा सवाल यह है कि: COLLADA किस जगह में इसके विपरीत बाध्य मुद्रा को निर्दिष्ट करता है? और मैं जिस जगह की आवश्यकता है उसमें उलटा बाध्य मुद्रा कैसे बदल सकता हूं?
क्या आपने 1.4.1 spec के "कोलाडा में एक कंकाल स्किनिंग" अनुभाग पढ़ा है? आपका फॉर्मूला – jterrace