2010-05-06 8 views
9

से यॉ, पिच और रोल कैसे प्राप्त करें मेरे पास एक दिशा वेक्टर है जो किसी स्थिति पर लागू होता है जिस पर मुझे कैमरा दिखाना चाहिए। GlRotatef का सही उपयोग करने के लिए मैं उस यो, पिच और रोल से कैसे प्राप्त कर सकता हूं?3 डी वेक्टर

अग्रिम

उत्तर

7

धन्यवाद आप शायद नहीं वास्तव में विचलन, पिच और रोल करना चाहते हैं। आपको बस सही परिवर्तन की आवश्यकता है। इसे बनाने के लिए gluLookAt का उपयोग करने का प्रयास करें। Documentation

+0

संकेत के लिए धन्यवाद। मैंने अभी ओपनजीएल का उपयोग शुरू किया और मुझे इस समारोह के बारे में पता नहीं था। मैंने इसका इस्तेमाल हल किया। – Jack

+0

यह एक अच्छा जवाब है, लेकिन सामान्य प्लेटफ़ॉर्म के उप-समूह के लिए केवल व्यावहारिक है जो जीएलयू प्रदान करता है (उदाहरण के लिए जरूरी नहीं कि ओपनजीएल ईएस प्लेटफ़ॉर्म) – jheriko

14

आप विचलन, एक दिशा वेक्टर से पिच और रोल नहीं मिल सकता है के रूप में दिशा वेक्टर केवल में (विचलन और पिच)

देखने के लिए विचलन और पिच आप त्रिकोणमिति का उपयोग प्राप्त करने के लिए किस दिशा बता देंगे - मैं आप मान कुछ काम ज्ञान है। कोणों को देखने के लिए कुछ उपयोगी आरेखों के लिए this wiki page देखें।

वाई = yaw, पी = पिच दे रहा है।

सबसे पहले पाने के लिए रास्ते से हटना आप चाहते हैं:

tan(Y) = x/(-y) 

अब पाने के लिए पिच:

tan(P) = sqrt(x^2 + y^2)/z 

Y और पी के लिए वास्तविक मूल्यों को प्राप्त करने के लिए आप उलटा तन उपयोग करने के लिए, मैं की आवश्यकता होगी व्युत्पन्न स्पष्ट करने के लिए इसे टैन का उपयोग करके ऊपर लिखा है।

ध्यान दें कि शून्य चिह्न इस बात पर निर्भर करते हैं कि आप कोण और अक्ष को कैसे परिभाषित करते हैं, लेकिन आपको विचार प्राप्त करना चाहिए।

फिर आप रोल 0 या जो कुछ भी आपको पसंद कर सकते हैं सेट कर सकते हैं।

+1

लेकिन व्यवहार में आमतौर पर किसी भी एप्लिकेशन में 'अप' दिशा होती है और आप लगभग हमेशा एक चुन सकते हैं उन्मुखीकरण जो ऊपर के करीब के रूप में 'ऊपर' रखता है। – sigfpe

+0

उत्तर के लिए बहुत बहुत धन्यवाद। हां आप सही हैं, रोल केवल वेक्टर द्वारा निर्धारित नहीं किया जा सकता है, मुझे एक अप वेक्टर (उपयोगकर्ता 207442 सुझावों के रूप में) या कोण निर्धारित करने वाला स्केलर चाहिए। मैंने gluLookAt का उपयोग करके अपनी समस्या हल की लेकिन मैं अभी भी इन कोणों को प्राप्त करने के बारे में उत्सुक हूं। – Jack

+0

तन (वाई) के लिए आपकी अभिव्यक्ति कम या ज्यादा अंतर्ज्ञानी है। तन (पी) के लिए इतना नहीं है। क्या आप समझा सकते हैं कि यह अभिव्यक्ति तन (पी) क्यों देती है, या किसी स्रोत से लिंक करती है जो इसे समझाती है? – dinosaur

2

फ़ेलिक्स के समीकरण गलत हैं। प्रिय भावी googlers, यहां आप क्या काम कर रहे हैं:

पिच मानना: एक्स अक्ष द्वारा रोटेशन, यो: वाई अक्ष द्वारा रोटेशन, रोल: जेड अक्ष द्वारा रोटेशन। दिशा वेक्टर वी (एक्स, वाई, जेड) इन समीकरणों के

pitch = asin(V.y/length(V)); 
yaw = asin(V.x/(cos(pitch)*length(V))); //Beware cos(pitch)==0, catch this exception! 
roll = 0; 
+0

यह मुझे देखता है जैसे यह एक ही चीज़ है, शायद आपको अपनी त्रिकोणमिति जांचनी चाहिए। – meneldal

6

कोई भी 'गलत' हैं, लेकिन सभी एक छोटे से अनाड़ी हैं। Ryder052, उदाहरण के लिए आप कुछ मामलों को ध्यान में रखते हैं जैसा आपने टिप्पणी की है। Atan2 का उपयोग क्यों नहीं करते?

को देखते हुए इकाई (सामान्यीकृत) दिशा वेक्टर घ

pitch = asin(-d.Y); 
yaw = atan2(d.X, d.Z)