자신의 좌표 주위에서 첫 번째 인물 뷰 "카메라"를 회전하려고하는데 대신 원점을 중심으로 회전합니다. 다음은 카메라 번역 및 회전에 대한 현재 코드입니다. 역시LWJGL ViewMatrix 1 인칭 뷰
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
도움 주셔서 감사합니다. 모든
Matrix4f.translate(camera.rotation, camera.matrix(Camera.VIEWMATRIX), camera.matrix(Camera.VIEWMATRIX));
의