2013-07-08 8 views
5

camera.rotate.y एक अनुमानित तरीके से बाएं या दाएं पैन रखें।थ्री.जेएस कैमरा ऊपर या नीचे झुकाव और क्षितिज स्तर

camera.rotate.x अनुमानित रूप से ऊपर या नीचे दिखता है जब camera.rotate.y 180 डिग्री पर है।

लेकिन जब मैं कैमरे का मूल्य बदलता हूं। कुछ नए मूल्य के लिए .rotate.y, और फिर मैं camera.rotate.x का मान बदलता हूं, क्षितिज घुमाता है।

मैंने कैमरे के बाद क्षितिज रोटेशन के लिए समायोजित करने के लिए एक एल्गोरिदम की तलाश की है। Rotate.x बदल गया है, लेकिन इसे नहीं मिला है।

उत्तर

10

तीन.जेएस में, किसी ऑब्जेक्ट का अभिविन्यास अपने यूलर रोटेशन वेक्टर object.rotation द्वारा निर्दिष्ट किया जा सकता है। रोटेशन वेक्टर के तीन घटक क्रमशः ऑब्जेक्ट के आंतरिक एक्स-अक्ष, वाई-अक्ष और जेड-अक्ष के चारों ओर रेडियंस में घूर्णन का प्रतिनिधित्व करते हैं।

जिस क्रम में घूर्णन किया जाता है उसे object.rotation.order द्वारा निर्दिष्ट किया गया है। डिफ़ॉल्ट क्रम "XYZ" है - एक्स-अक्ष के चारों ओर घूर्णन पहले होता है, फिर y-axis, फिर z-axis।

ऑब्जेक्ट के आंतरिक समन्वय प्रणाली के संबंध में घूर्णन किया जाता है - विश्व समन्वय प्रणाली नहीं। यह महत्वपूर्ण है। इसलिए, उदाहरण के लिए, एक्स-रोटेशन के बाद, ऑब्जेक्ट की वाई- और जेड-अक्ष आमतौर पर विश्व अक्षों के साथ गठबंधन नहीं की जाएगी। इस तरह से निर्दिष्ट घूर्णन अद्वितीय नहीं हैं।

तो, उदाहरण के लिए, यदि कोड में आपके द्वारा निर्दिष्ट,

camera.rotation.y = y_radians; // Y first 
camera.rotation.x = x_radians; // X second 
camera.rotation.z = 0; 

रोटेशन, वस्तु की rotation.order से लागू होते हैं जब आप उन्हें निर्दिष्ट में नहीं।

अपने मामले में, आप rotation.order को "YXZ" पर सेट करने के लिए अधिक सहज महसूस कर सकते हैं, जो "शीर्षक, पिच और रोल" के बराबर है।

यूलर कोणों के बारे में अधिक जानकारी के लिए, Wikipedia article देखें। आलेख में बताए गए अनुसार, तीन.जेएस टेट-ब्रायन सम्मेलन का पालन करते हैं।

तीन.जेएस आर 61

+0

आपकी टिप्पणी काम करती है। कैमरा ऑब्जेक्ट प्रारंभिकता में, मैंने कोड की निम्न पंक्ति, 'camera.eulerOrder = "YXZ" जोड़ा; ' –

+1

अब यह' camera.rotation.order =' YXZ 'है; ' – WestLangley

+0

क्या आपका मतलब" यो, पिच और रोल" ? :) – fuzz

संबंधित मुद्दे