आप जो पूछ रहे हैं उसे आर्कबॉल रोटेशन कहा जाता है। यदि आप समझते हैं कि वे कैसे काम करते हैं, तो Quaternions आसान समाधान है। आप हालांकि quaternions के बिना ही प्राप्त कर सकते हैं।
पूर्व आवश्यक वस्तुएँ
क्या आप जानते हैं कि वस्तुओं को सामान्य रूप से कैसे घुमाना है? मान लीजिए कि आपके मूल में कोई वस्तु है। क्या आप जानते हैं कि आप इसे कैसे घुमाते हैं (संकेत: कुछ रोटेशन मैट्रिक्स से गुणा करें)? यदि हाँ, तो मैं मान रहा हूँ कि यदि आप पहले वस्तु का अनुवाद करते हैं और फिर उसे घुमाते हैं तो क्या होगा?
आपको पता होना चाहिए कि कोण-अक्ष से रोटेशन मैट्रिक्स की गणना कैसे करें (पाई के रूप में आसान है, ऑनलाइन समीकरणों के असंख्य को देखें, उनमें से बहुत से आपको कोड भी देते हैं)
समाधान
- कैमरे के ऊपर और सही वैक्टर प्राप्त करें। ध्यान दें कि उन्हें सामान्य किया जाना चाहिए।
- वेक्टर को फोकस बिंदु से कैमरे तक ले जाएं (कैमपोजिशन - फोकस)। यह वेक्टर है जिसे आप घुमाने जा रहे हैं। आइए इस कैमफोकस वैक्टर को कॉल करें ।
- तय करें कि आप कैमरे के संबंध में कितना जम्हाई / पिच में घूमना चाहते हैं
- दो रोटेशन मेट्राइस बनाएं। 1 रोटेशन मैट्रिक्स आपके द्वारा तय किए गए अक्ष और जबड़े कोण के रूप में कैमरे के ऊपर का उपयोग करेगा । दूसरा रोटेशन मैट्रिक्स आपके द्वारा तय किए गए अक्ष और पिच कोण के रूप में कैमरे के अधिकार का उपयोग करेगा ।
- अब नए रोटेशन मेट्रिसेस के साथ camFocusVector को घुमाएं । यह अब मूल के सापेक्ष कैमरे की आपकी नई स्थिति है। हम निश्चित रूप से, यह फोकस बिंदु के सापेक्ष होना चाहते हैं ...
- CamFocusVector पर फोकस बिंदु स्थिति जोड़ें । यह अब आपके कैमरे की नई स्थिति है। तदनुसार अपने कैमरे का अनुवाद करें।
- अंत में, कैमरे से अपने लुकअट () फ़ंक्शन को कॉल करके फ़ोकस पॉइंट पर ध्यान केंद्रित करने के लिए कहें
चेतावनियां
आपको कुछ मामलों या विलक्षणताओं की तलाश करनी होगी, जिस पर आपका कैमरा काम करना बंद कर देगा। उदाहरण के लिए सीधे नीचे / ऊपर देख रहे हैं। मैं आपको बताऊंगा कि इनसे कैसे निपटा जाए।
EDIT1: कैसे कैमरे के orthonormal वैक्टर पुनर्गणना करने के लिए
आप पहले से ही कैमरे की दिशा जानते हैं ((CameraPos - focusPoint) .normalize ())। अब मान लें कि आपके कैमरे का अप + वाई है (या w / e आपकी दुनिया की वर्तमान धुरी है ... जो आपके ऊपर है)। अब बस पार दिशा के साथ अप प्राप्त करने के लिए सही । किया हुआ? नहीं! आपका अप वेक्टर अब अन्य दो के लिए रूढ़िवादी नहीं है। इसे ठीक करने के लिए, दिशा के साथ दाईं ओर क्रॉस करें और आप अपना नया उठाएं ।
ध्यान दें कि ग्राम-श्मिट वास्तव में वैक्टर को ओर्थोनॉर्मालाइज करने के लिए क्या करना चाहिए।
फिर, यह के रूप में चेतावनियां लिख लेना चाहिए कुछ मामलों में काम करने के लिए असफल हो जायेगी ( दिशा के समानांतर है ऊपर उदाहरण के लिए)।