जवाबों:
आप अपने चतुर्भुज को एक यव / पिच / रोल सेट के कोणों में विघटित कर सकते हैं, लेकिन यह आमतौर पर ओवरकिल होता है।
इस तरह अपने quaternions की रचना के बजाय:
cameraOrientation = cameraOrientation * framePitch * frameYaw;
इसे इस्तेमाल करे:
cameraOrientation = framePitch * cameraOrientation * frameYaw;
इसके बाद यह कभी भी झुकाव / रोल उत्पन्न नहीं करेगा और अलग-अलग भंडारण के बराबर है
framePitch
और frameYaw
float
प्रकार? इसके अलावा, मैं आपके पहले वाक्य पर कुछ स्पष्टीकरण के लिए आभारी रहूंगा।
cameraOrientation
, framePitch
और frameYaw
सभी बटेरियन हैं (प्रत्येक चतुर्भुज 4 फ्लोट्स या डबल्स हैं)।
यह एक समस्या है जो मुझे थोड़ी देर के लिए थी, और मुझे इसके लिए कोई जवाब नहीं मिला, इसलिए मैंने सोचा कि मैं इसे यहां पोस्ट करूंगा।
यह वास्तव में काफी सरल है। आप सबसे अधिक संभावना यह है कि घुमाव इस प्रकार हैं:
currentDirection * newRotation;
लेकिन, इसे इस तरह से करना भी काम नहीं करता है।
newRotation * currentDirection;
आपको जो करना है, वह ऊपर और नीचे की घुमाव के लिए पहले क्रम में, और बग़ल में घुमाव के लिए दूसरे क्रम में करना है।
मेरे लिए, यह इस तरह था:
if (keyboard.IsKeyDown(Keys.Up))
Direction = Direction * Quaternion.CreateFromAxisAngle(new Vector3(1, 0, 0), TurnSpeed);
if (keyboard.IsKeyDown(Keys.Down))
Direction = Direction * Quaternion.CreateFromAxisAngle(new Vector3(-1, 0, 0), TurnSpeed);
if (keyboard.IsKeyDown(Keys.Left))
Direction = Quaternion.CreateFromAxisAngle(new Vector3(0, 0, 1), TurnSpeed) * Direction;
if (keyboard.IsKeyDown(Keys.Right))
Direction = Quaternion.CreateFromAxisAngle(new Vector3(0, 0, -1), TurnSpeed) * Direction;
एक कारण के लिए, पहला तरीका वर्तमान बग़ल दिशा के सापेक्ष रोटेशन है, जिसे आप ऊपर और नीचे चाहते हैं, लेकिन आप नहीं चाहते कि बग़ल में घुमाव हो, जिसके कारण दूसरे क्रम की आवश्यकता है।
एक एफपीएस कैमरा के लिए आप आमतौर पर रोल नहीं चाहते हैं और +/- 90 डिग्री पिच तक ही सीमित रहते हैं, इसलिए मैं सिर्फ यव और पिच कोणों का उपयोग करके वर्तमान स्थिति का ट्रैक रखना चाहूंगा। चतुर्धातुक पूर्ण शक्ति वास्तव में इसके लिए सहायक नहीं है।
यदि आप एफपीएस कैमरा और एनिमेटेड कैमरों के बीच क्वाटरनियन कीफ़्रेम इंटरपोलेशन का उपयोग करके या ऐसा कुछ करना चाहते हैं, तो आप अभी भी यव / पिच एंगल्स को क्वाटर्न्स से परिवर्तित कर सकते हैं।