3d 在小车中,在摄影机前面设置三个对象

3d 在小车中,在摄影机前面设置三个对象,3d,three.js,quaternions,360-virtual-reality,3d,Three.js,Quaternions,360 Virtual Reality,我正在使用 var dist = -100; var vec = new THREE.Vector3( 0, 0, dist ); vec.applyQuaternion( camera.quaternion ); object.position.copy( vec ); object.lookAt(camera.position); 这真的很有效 我现在必须旋转相机(用于VR视频播放器)来设置它的起始位置,要做

我正在使用

        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
;这是错误的,但我不确定是否有更好的方法来合并这些数字

@Westlangley在这里回答

回答了我的问题

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

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

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

您可以直接将对象添加到
相机
对象中<代码>摄影机。添加(对象)这会将对象放置在相机空间内,它会自动跟随相机的移动和旋转。感谢@TheJim01,是的,我以前也这么做过,但该项目具有可选择的元素,因此相机需要能够查看不同的部分。如果有必要的话,我会回到这里我只是想避免它。