को कैसे बाधित करें 3 डी रोटेशन को बाधित करने का सही/सर्वोत्तम तरीका क्या है (यूलर कोण और/या quaternions का उपयोग करके)?3 डी रोटेशन (यूलर)
ऐसा लगता है कि ऐसा करने के मेरे तरीके में कुछ गड़बड़ है। मैं एनीमेशन के लिए कंकाल पदानुक्रम में हड्डियों के घूर्णन को लागू कर रहा हूं, और हड्डियां कभी-कभी गलत अभिविन्यास में "कूद" लगती हैं, और व्यक्तिगत यूलर घटक अपनी श्रेणियों के विपरीत छोर पर घूमते हैं।
मैं वर्तमान अभिविन्यास का प्रतिनिधित्व करने के लिए यूलर कोण का उपयोग कर रहा हूं, घुमावदार करने के लिए quaternions में परिवर्तित, और प्रत्येक Euler कोण धुरी स्वतंत्र रूप से clamping।
Euler min = ...;
Euler max = ...;
Quat rotation = ...;
Euler eCurrent = ...;
// do rotation
Quat qCurrent = eCurrent.toQuat();
qCurrent = qCurrent * rotation;
eCurrent = qCurrent.toEuler();
// constrain
for (unsigned int i = 0; i < 3; i++)
eCurrent[i] = clamp(eCurrent[i], min[i], max[i]);
आम तौर पर quaternions का उपयोग करना बेहतर है, क्योंकि वे यूलर कोणों की सीमाओं से ग्रस्त नहीं हैं (जैसे जिम्बल लॉक, जो संभवतः आप अनुभव कर रहे हैं)। जब भी आपको जटिल घूर्णन की आवश्यकता होती है (उदाहरण के लिए 3 अक्ष पर) quaternions का उपयोग करें। यूलर कोण साधारण लोगों पर बस ठीक है। –
कारण मैं यूलर कोण का उपयोग कर रहा हूं इसलिए मैं उन्हें रोक सकता हूं। मुझे नहीं पता कि quaternions को कैसे रोकें। – KTC
कृपया पढ़ें http://www.geometrictools.com/Documentation/ConstrainedQuaternions.pdf –