2012-07-26 16 views
8

थ्री.जेएस में, मैं कैमरे ऑब्जेक्ट को चयनित ऑब्जेक्ट पर घुमाने के लिए THREE.quaternion का उपयोग करना चाहता हूं।Three.js कैमरे को घुमाने के लिए quaternion का उपयोग कैसे करें

मैंने वेब पर खोज की लेकिन मुझे इस quaternion कक्षा का उपयोग करने के बारे में कोई उदाहरण/डेमो या दस्तावेज़ नहीं मिला।

मैं निम्नलिखित कोड के साथ अपने भाग्य को आजमाने:

camera = new THREE.PerspectiveCamera(40, window.innerWidth/window.innerHeight, 1, 10000); 
    camera.position.y = 10; 
    camera.position.z = 0; 
    camera.position.x = radious; 
    camera.useQuaternion = true; 

    // I did use the TrackballTrackballControls. Maybe it causes the problem so I put it here 
    controls = new THREE.TrackballControls(camera, document.getElementById(_canvasElement)); 

    // function to make the camera rotate to the object 
    function focusOn3DObject(obj){ 
     obj.useQuaternion = true; 
     obj.quaternion = new THREE.Quaternion(obj.position.x, obj.position.y, obj.position.z, 1); 

     var newQuaternion = new THREE.Quaternion(); 
     THREE.Quaternion.slerp(camera.quaternion, obj.quaternion, newQuaternion, 0.07); 
     camera.quaternion = newQuaternion; 
    } 

लेकिन यह काम नहीं करता। क्या मैं कुछ भुल गया? कृपया मदद करें। अग्रिम में धन्यवाद।

obj.quaternion = new THREE.Quaternion(obj.position.x, obj.position.y, obj.position.z, 1); 

आप

obj.useQuaternion = true 

स्थापित करने के लिए दृश्य पर आपत्ति जोड़ने, जब आप बारी बारी से यह स्वतः ही obj.quaternion को लागू किया जाएगा के बाद की जरूरत है:

+2

ध्यान दें कि नए THREE.js में, 'useQuaternion' हटा दिया गया है। पुस्तकालय अब डिफ़ॉल्ट रूप से quaternions का उपयोग करता है। –

+0

यह भी ध्यान दें कि आज (अगस्त/2015) तीन की कैमरा ऑब्जेक्ट्स में एक विधि है .lookAt (vector3) - यह किसी ऑब्जेक्ट की स्थिति के साथ वेक्टर 3 प्राप्त करता है। कैमरे को देखने के लिए आप पैरामीटर के रूप में किसी ऑब्जेक्ट 3 डी.position को पास कर सकते हैं। इसे देखें: http://threejs.org/docs/index.html#Reference/Cameras/Camera – Tiago

उत्तर

1

मैं इस लाइन अभ्यस्त काम लगता है।

दूसरा बिंदु यह है कि आपको ऑब्जेक्ट को अपने नियंत्रण में लागू करना चाहिए, न कि कैमरे पर। क्योंकि आप ऑब्जेक्ट को नियंत्रित करना चाहते हैं, न कि कैमरा?

+0

मैं कैमरा घुमाने और ऑब्जेक्ट पर फ़ोकस करना चाहता हूं। कैमरा ऑब्जेक्ट के चारों ओर ले जाएगा। तो मुझे लगता है कि कैमरा नियंत्रित किया जाएगा। क्या मैं गलत था? – user1533481

+0

ऐसा लगता है कि मुझे अंधेरे में मिल रहा है क्योंकि इसमें कोई दस्तावेज़ या कोई उदाहरण नहीं है :(। क्या आप कृपया मुझे फंक्शन स्लर्प समझा सकते हैं? के लिए पैरामीटर क्या है? मैंने आपके सुझाव की कोशिश की लेकिन सफल नहीं हुआ। – user1533481

+6

नोट कि नए THREE.js में, 'useQuaternion' को हटा दिया गया है। लाइब्रेरी अब डिफ़ॉल्ट रूप से quaternions का उपयोग करता है। –

13

स्लरप काफी आसान है।

  • targetRotation वास्तविक कैमरा रोटेशन
  • destinationRotation वस्तु रोटेशन
  • destinationRotation नए चार का समुदाय जो नया कैमरा रोटेशन खेल का मैदान
  • percentOfRotation इस पैरामीटर है हो जाएगा, मैं उपयोग कर रहा हूँ 0.07: यह 4 पैरामीटर लेता है अभी यहाँ, के बीच 0 (0%) मूल्य और 1 (100%) हो सकता है

यह मेरा रोटेशन पद्धति है:

var qm = new THREE.Quaternion(); 
THREE.Quaternion.slerp(camera.quaternion, destRotation, qm, 0.07); 
camera.quaternion = qm; 
camera.quaternion.normalize(); 

उम्मीद है कि यह आपकी मदद करेगा। और परेशान मत करो मैंने निम्नलिखित कैमरे पर कुछ हफ्तों तक भी काम किया।

+0

हाय, प्रलेखन में, .slerp में केवल 2 पैरामीटर हैं ... https://threejs.org/docs/#Reference /Math/Quaternion...क्या मैंने कुछ गलत समझा? –

+0

@ सेबेस्टियन गारिया-रोमोओ क्वाटरनियन पर दो स्लर्प विधियां हैं - इस उत्तर में उपयोग किया जाने वाला एक स्थिर है। दोनों को [quaternion दस्तावेज़ पृष्ठ] पर सूचीबद्ध किया गया है (https: //threejs.org/docs/#api/math/Quaternion.slerp), लेकिन स्थैतिक विधि नीचे है। –

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