2017-06-15 36 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);