【问题标题】:Camera moves forward continuously in WebVR Cardboard/ three.js摄像头在 WebVR Cardboard/three.js 中不断向前移动
【发布时间】:2018-03-01 20:44:36
【问题描述】:

在一个只需要一个纸板查看器的环境中,我一直在尝试让相机缓慢、连续地朝着用户正在查看的方向前进。

我通过大量的试验和错误发现,通常在非 VR 环境中有效的方法在 WebVR 中无效,我假设是因为透视相机的行为可能已经被覆盖了?

所以如下:

function render() {
    camera.translateZ(-0.02);
    renderer.render( scene, camera );
}

不起作用,相机保持静止。所以我考虑将相机添加到另一个对象并移动该对象:

var cube = new THREE.Mesh( geometry, material );
scene.add( cube );
cube.add(camera);
...
function render() {
    cube.translateZ(-0.02);
    cube.rotation.copy(camera.rotation);
    renderer.render( scene, camera );
}

上述排序工作,相机随着立方体移动但旋转关闭。透过纸板观察器并朝北看,似乎为了让相机向东移动,我必须将观察器向东旋转 180 度,以便我朝南。

我想我可能对四元数和欧拉旋转感到困惑,或者我错过了 vector3 定位的技巧?

任何想法都非常感谢!

【问题讨论】:

    标签: javascript three.js google-cardboard webvr


    【解决方案1】:

    创建空的 GameObject 并使其成为 MainCamera 的父级,然后将此脚本附加到该空的游戏对象上。

    GameObject cameraMain;
    float speed = 2f;
    
    void Start () {
        cameraMain = GameObject.FindGameObjectWithTag("MainCamera");
    }
    
    void Update () {
        transform.localPosition += transform.forward * speed * Time.deltaTime;
        transform.localRotation = Quaternion.Euler(cameraMain.transform.localEulerAngles.x, cameraMain.transform.localEulerAngles.y, cameraMain.transform.localEulerAngles.z);
    }
    

    【讨论】:

      猜你喜欢
      • 2019-07-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-06-08
      • 2012-01-10
      • 2018-09-03
      • 1970-01-01
      • 2012-06-23
      相关资源
      最近更新 更多