【问题标题】:Three set object in front of camera in a dolly三组物体在小车的摄像机前
【发布时间】:2023-06-13 11:22:02
【问题描述】:

我正在使用

在相机前面放置一个物体
        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;是错误的,但我不确定合并数字的更好方法。

【问题讨论】:

  • 你可以直接将你的对象添加到camera对象...camera.add(object);这会将对象放置在相机空间中,它会自动跟随相机的移动和旋转。
  • 感谢@TheJim01,是的,我之前也这样做过,但该项目具有可选元素,因此相机需要能够查看不同的部分。如果必须,我会回到这个,我只是想避免它。

标签: 3d three.js quaternions 360-virtual-reality


【解决方案1】:

@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);

【讨论】:

    最近更新 更多