2017-06-15 70 views
0

我使用三組對象的推車

 var dist = -100; 
     var vec = new THREE.Vector3(0, 0, dist); 
     vec.applyQuaternion(camera.quaternion); 
     object.position.copy(vec); 
     object.lookAt(camera.position); 

這個作品真的很好配售對象在鏡頭前。

我現在不得不旋轉攝像頭(它的VR視頻播放器)來設置它的起始位置,並做到這一點,仍然與WebVR樣板一起工作,我將視頻添加到小車對象並旋轉。

dolly = new THREE.Group(); 
    dolly.position.set(0, 0, 0); 
    scene.add(dolly); 

    camera.up.set(0, 1, 0); 
    dolly.add(camera); 

而物體現在不在攝像機前面。我試圖將小車旋轉應用到矢量以說明該角度。

 var rotation = new THREE.Euler().setFromQuaternion(camera.quaternion, camera.rotation.order); 
     rotation.y += dolly.rotation.y; 
     var quat = new THREE.Quaternion().setFromEuler(rotation, camera.rotation.order); 
     vec.applyQuaternion(quat); 

這主要適用於攝像機是特定角度但有時不是對象也在其x軸上旋轉的情況。

我假設rotation.y += dolly.rotation.y;是錯誤的,但我不確定合併數字的更好方法。

+0

你可以只直接添加你的對象到'camera'對象...'camera.add(對象);'這將物體放置在相機空間內,它將自動跟隨相機的移動和旋轉。 – TheJim01

+0

謝謝@ TheJim01,是的,我之前是這麼做的,但是該項目有可選擇的元素,所以相機需要能夠看到不同的部分。如果我不得不努力迴避,我只是想避免它。 – user5839

回答

0

@WestLangleys回答這裏 three.js tween object to front of camera

回答我的問題

 var pLocal = new THREE.Vector3(0, 0, dist); 

     var target = pLocal.applyMatrix4(camera.matrixWorld); 

     object.position.copy(target); 
     object.lookAt(camera.position);