【问题标题】:Keyboard Controls With DeviceOrientationControls带有 DeviceOrientationControls 的键盘控制
【发布时间】:2015-06-01 04:42:40
【问题描述】:

我目前正在使用 three.js 创建一个 VR 网络应用。作为相机控件,我在 google cardboard three.js 演示中使用了设备方向控件used here

我需要做的是为此添加键盘控件(例如向上箭头前进等)。我在这里摆弄着在两个轴(x 和 z)上移动相机:

if (e.keyCode == '38') {
    camera.position.set(0, 10, camera.position.z+4);

    controls.target.set(
        camera.position.x +4,
        camera.position.y,
        camera.position.z
    );
    effect.render(scene, camera);
...

但是我想让角色相对于他们正在看的位置移动(例如,你看一个方向,然后按向上箭头,角色就会按照你看的方式移动)。就像第一人称视角。

有没有人知道如何做到这一点?我尝试使用来自three.js 的第一人称控制,但这消除了VR 游戏必不可少的头部跟踪。

任何答案将不胜感激。 (我的源代码实际上只是 Google cardboard three.js 演示代码,其中添加了一个功能太检测按键)

【问题讨论】:

    标签: javascript three.js google-cardboard virtual-reality


    【解决方案1】:

    我通过不同的方法解决了这个问题。我创建了一个在场景中移动的 object3d。模型和相机是该对象的子对象。

    我正在用相机旋转物体 3d,同时以相反的方向旋转模型。当我旋转相机对象看起来保持方向。当我想移动对象时,只需 translateX 使用相机的对象并将模型旋转到 0。这样就成功了。

    在长距离上(我有数百万个单位)开始变得生涩。原因是精度丢失。

    我通过将对象的位置保持在 0,0,0 并沿相反方向移动所有其他事物来解决它。这使您的模型仍然在 0,0,0 坐标上,并且具有正确的旋转并且世界在移动。

    最简单的例子:

    你尝试类似的东西

    scene.add(character_model);
    scene.add(camera);
    //camera.rotate ....
    character_model.translateX(1);
    character_model.rotateX(1);
    //etc ...
    

    现在您尝试围绕枢轴 (character_model) 移动相机,但这是过于复杂的数学运算。

    试试:

    var controls_dimension = new THREE.Object3D();
    scene.add(controls_dimension);
    controls_dimension.add(character_model);
    controls_dimension.add(camera);
    
    //use controls to rotate with this object, not with character_model
    controls_dimension.rotateX(2);
    
    // in the same rotate model to opposite direction. You can make 
    // illusion of rotating camera, not a model.
    character_model.rotateX(2*-1);
    
    /* 
    when you want to go in camera direction=controls_dimension=controls_dimension.translateX(1) 
    and we moving (you most only animate model rotation to controls_dimension.rotation)
    */
    

    【讨论】:

    • 好主意!,你能附上一个sn-p吗?我真的不确定你的意思.. 抱歉,谢谢
    • 有点复杂,不是一段代码,而是构建几何的整个逻辑。示例添加到答案。
    猜你喜欢
    • 1970-01-01
    • 2021-02-26
    • 2019-04-27
    • 2019-05-08
    • 2017-09-22
    • 1970-01-01
    • 2011-10-10
    • 2010-10-31
    • 1970-01-01
    相关资源
    最近更新 更多