Java OpenGL/LWJGL如何在移动摄像机时将物体保持在屏幕中央

Java OpenGL/LWJGL如何在移动摄像机时将物体保持在屏幕中央,java,opengl,camera,lwjgl,Java,Opengl,Camera,Lwjgl,所以我想用Java制作一个LWJGL3游戏。我想在移动摄像机的时候总是把玩家的物体放在屏幕中央。 但我在这方面有困难 我试着将摄像机的位置设置为球员的位置,但效果不太好。 当相机移动时,它会移动玩家,但是它不能移动足够让玩家在中间。 这是我的代码: public class Player extends Texture { Camera camera; public Player(Vector3f position, Vector3f rotation, Camera camera) {

所以我想用Java制作一个LWJGL3游戏。我想在移动摄像机的时候总是把玩家的物体放在屏幕中央。 但我在这方面有困难

我试着将摄像机的位置设置为球员的位置,但效果不太好。 当相机移动时,它会移动玩家,但是它不能移动足够让玩家在中间。

这是我的代码:

public class Player extends Texture {

Camera camera;

public Player(Vector3f position, Vector3f rotation, Camera camera) {
    super("/resources/textures/entities/Player.png", position, rotation, new Vector3f(0.1f, 0.2f, 0.1f));
    this.camera = camera;
}

public void update() {
    Vector3f camPos = camera.getPosition();
    // set x and y from camera to player
    this.getGameObject().getPosition().x = camPos.x;
    this.getGameObject().getPosition().y = camPos.y;
    }
}
我的相机更新方法如下所示:

public void update() {
    if (Input.isKeyDown(GLFW.GLFW_KEY_A)) {
        this.position.x -= movementSpeed * Engine.delta;
    }
    if (Input.isKeyDown(GLFW.GLFW_KEY_D)) {
        this.position.x += movementSpeed * Engine.delta;
    }
    if (Input.isKeyDown(GLFW.GLFW_KEY_W)) {
        this.position.y += movementSpeed * Engine.delta;
    }
    if (Input.isKeyDown(GLFW.GLFW_KEY_S)) {
        this.position.y -= movementSpeed * Engine.delta;
    }

    if (Input.isScrollingUp()) {
        this.position.z -= movementSpeed * ZOOM_MULTIPLIER * Engine.delta;
        if (this.position.z < MIN_Z) {
            this.position.z = MIN_Z;
        }
    }
    if (Input.isScrollingDown()) {
        this.position.z += movementSpeed * ZOOM_MULTIPLIER * Engine.delta;
        if (this.position.z > MAX_Z) {
            this.position.z = MAX_Z;
        }
    }
}
public void update(){
如果(输入.isKeyDown(GLFW.GLFW_键A)){
此.position.x-=movementSpeed*Engine.delta;
}
if(输入.isKeyDown(GLFW.GLFW_键D)){
此.position.x+=movementSpeed*Engine.delta;
}
if(Input.isKeyDown(GLFW.GLFW_KEY_W)){
此.position.y+=movementSpeed*Engine.delta;
}
if(输入.isKeyDown(GLFW.GLFW_键)){
此.position.y-=movementSpeed*Engine.delta;
}
if(Input.isScrollingUp()){
this.position.z-=移动速度*缩放倍增*引擎.delta;
如果(此位置zMAX_z){
此.position.z=MAX_z;
}
}
}

我不认为相机更新方法有什么问题,但如果它有帮助@rabbi76 ok添加了一些代码,希望这有助于找到答案。@rabbi76旋转只是一个矢量3f,因此没有欧拉角。但是轮换接力重要吗?纹理是二维的,但是是三维的,所以我以后可以做一些三维的事情。@Rabbi76这是教程中Martixf4类的代码。@Rabbi76你知道我想在同一个方向上同时移动相机和播放器,所以不是凸轮移动,而是播放器不移动,它只是从侧面看进去看法我希望这能澄清我的问题。对不起,那个教程中的矩阵库太乱了。更改
result=Matrix4f.multiply(translationMatrix,Matrix4f.multiply(rotationMatrix,scaleMatrix))
结果=矩阵4f.multiply(比例矩阵,矩阵4f.multiply(旋转矩阵,平移矩阵))