相机控制与它们应该是相反的。为什么?

时间:2017-05-21 13:33:12

标签: graphics three.js camera axis

我在Three.js中创造了一个可玩的迷宫。所有物体 - 地板,天花板和墙壁 - 都放置在正X轴和Z轴内。相机放置如下:

camera = new THREE.PerspectiveCamera(45,
                                         window.innerWidth / window.innerHeight,
                                         0.1,
                                         1000
    );
    camera.position.set(0, 0.25, 0);

    // The camera is placed pointing to the nearest open path from the
    // initial position. Check mazeGenerator.js for the reference of
    // "coordinates".
    if(grid[1][0] == coordinates.W)
    {
        camera.lookAt(new THREE.Vector3(1, 0.25, 0));
    }
    else
    {
        camera.lookAt(new THREE.Vector3(0, 0.25, 1));
    }

它会像那样移动:

function keyboardCheck()
{
    var movementSpeed = 0.02;
    var rotationSpeed = 0.03;

    if(keyboard.pressed('w') || keyboard.pressed('up'))
    {
        camera.translateZ(-movementSpeed);
    }

    if(keyboard.pressed('a') || keyboard.pressed('left'))
    {
        camera.rotateY(rotationSpeed);
    }

    if(keyboard.pressed('d') || keyboard.pressed('right'))
    {
        camera.rotateY(-rotationSpeed);
    }
}

如果我没有使用lookAt功能放置相机,它似乎面向[0, 0, 0],但当然我想做的是通过使相机面向最近的方式帮助播放器一点点开放的道路。

为了让它前进,我必须减少Z,因为否则当你击中"向前移动"关键它倒退了。这让我觉得即使我告诉相机看某个方向,物体的Z轴也与世界的Z轴相反。

问题本身是:为什么会发生这种情况?

非常感谢你。

1 个答案:

答案 0 :(得分:1)

相机向下看其负z轴,所以要向前移动,请执行以下操作:

camera.translateZ( - distance );

所有其他物体都被认为是朝着正z轴的方向看,所以要向前移动其他物体,你会使用

object.translateZ( distance );

three.js r.85