我在OpenGL中有一个摄像头,它可以在 X 和 Z 轴上移动。
您可以使用左右箭头按钮旋转相机,并使用WASD 按钮向前、向后、向左和向右移动。这是移动的方法。
public void move(float amount, float dir) {
z += amount * Math.sin((Math.toRadians(ry + 90 * dir)));
x += amount * Math.cos((Math.toRadians(ry + 90 * dir)));
}
“ amount ”是速度,“ dir ”是“0”或“1”,因此它将“90”设置为“0”或将其保留为“90”。“ z ”是z轴上的位置。如“ x ”和“ y ”。“ rz ” 是在 z 轴上的旋转。如“ rx ”和“ ry ”。
有了这些,我就不能在 Y 轴上移动,也就是 UP 和 DOWN。我设法添加了旋转代码以使相机向上 和向下看,但我无法使相机转到您正在看的地方。这是旋转方法:
public void rotate(float amount, float way) {
if (way == ROTATE_RIGHT)
ry += amount;
else if (way == ROTATE_LEFT)
ry -= amount;
if (way == ROTATE_UP && rx >= -90)
rx -= amount;
else if (way == ROTATE_DOWN && rx <= 90)
rx += amount;
}
这就是我调用 move() 方法的方式。
if (Keyboard.isKeyDown(Keyboard.KEY_W))
cam.move(0.01f, Camera.MOVE_STRAIGHT);
if (Keyboard.isKeyDown(Keyboard.KEY_S))
cam.move(-0.01f, Camera.MOVE_STRAIGHT);
if (Keyboard.isKeyDown(Keyboard.KEY_A))
cam.move(0.01f, Camera.MOVE_STRAFE);
if (Keyboard.isKeyDown(Keyboard.KEY_D))
cam.move(-0.01f, Camera.MOVE_STRAFE);
Camera.MOVE_STRAIGHT = 1和Camera.MOVE_STRAFE = 0并且cam 是一个 Camera 对象。