我想圍繞它自己的座標旋轉第一人稱視圖「相機」,而不是圍繞原點旋轉。這是我當前的相機翻譯和旋轉代碼。LWJGL ViewMatrix第一人稱視圖
if (Keyboard.isKeyDown(Keyboard.KEY_W)) {
xMod -= 0.0025f * (float)delta * (float)Math.sin(Math.toRadians(camera.rotation.y));
zMod += 0.0025f * (float)delta * (float)Math.cos(Math.toRadians(camera.rotation.y));
}
if (Keyboard.isKeyDown(Keyboard.KEY_S)) {
xMod += 0.0025f * (float)delta * (float)Math.sin(Math.toRadians(camera.rotation.y));
zMod -= 0.0025f * (float)delta * (float)Math.cos(Math.toRadians(camera.rotation.y));
}
if (Keyboard.isKeyDown(Keyboard.KEY_A)) {
xMod -= 0.0025f * (float)delta * (float)Math.sin(Math.toRadians(camera.rotation.y-90));
zMod += 0.0025f * (float)delta * (float)Math.cos(Math.toRadians(camera.rotation.y-90));
}
if (Keyboard.isKeyDown(Keyboard.KEY_D)) {
xMod -= 0.0025f * (float)delta * (float)Math.sin(Math.toRadians(camera.rotation.y+90));
zMod += 0.0025f * (float)delta * (float)Math.cos(Math.toRadians(camera.rotation.y+90));
}
if (Keyboard.isKeyDown(Keyboard.KEY_ESCAPE)) {
Mouse.setGrabbed(false);
}
if (Mouse.isButtonDown(0)) {
Mouse.setGrabbed(true);
}
if (Mouse.isGrabbed()) {
camera.rotation.y += (Mouse.getDX() * 0.005f) * delta;
camera.rotation.x += (Mouse.getDY() * -0.005f) * delta;
}
if (camera.rotation.x >= 90f) {
camera.rotation.x = 90f;
}
else if (camera.rotation.x <= -90f) {
camera.rotation.x = -90f;
}
if (Mouse.isGrabbed()) {
camera.position.x += xMod;
camera.position.z += zMod;
}
camera.reset();
Matrix4f.translate(camera.rotation, camera.matrix(Camera.VIEWMATRIX), camera.matrix(Camera.VIEWMATRIX));
Matrix4f.rotate(degToRad(camera.rotation.x), new Vector3f(1f,0f,0f), camera.matrix(Camera.VIEWMATRIX), camera.matrix(Camera.VIEWMATRIX));
Matrix4f.rotate(degToRad(camera.rotation.y), new Vector3f(0f,1f,0f), camera.matrix(Camera.VIEWMATRIX), camera.matrix(Camera.VIEWMATRIX));
Matrix4f.rotate(degToRad(camera.rotation.z), new Vector3f(0f,0f,1f), camera.matrix(Camera.VIEWMATRIX), camera.matrix(Camera.VIEWMATRIX));
Matrix4f.scale(camera.scale, camera.matrix(Camera.VIEWMATRIX), camera.matrix(Camera.VIEWMATRIX));
camera.reset()執行此...
public void reset() {
viewMatrix = new Matrix4f();
}
實質上正在重置視圖矩陣
也,camera.rotation是vector3f和camera.matrix返回一個矩陣,無論是Camera.ViewMatrix或Camera.ProjectionMatrix
感謝您的幫助。