我正在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轴相反。
问题本身就是:为什么会这样?
提前非常感谢你。
- https://github.com/MikelAlejoBR/3D-Maze-95/tree/0.4
- https://github.com/MikelAlejoBR/3D-Maze-95/issues/8
相机正在向下看其负 z 轴,因此要向前移动,请执行以下操作:
camera.translateZ( - distance );
所有其他对象都被视为朝其正 z 轴的方向看,因此要将其他对象向前移动,您可以使用
object.translateZ( distance );
三.js R.85