繁体   English   中英

LWJGL3中的第三人称摄影机动作

[英]3rd person camera movement in LWJGL3

最近,我一直在关注ThinMatrix的OpenGL教程,以Java编写游戏。 但是,由于他使用的是LWJGL2,而我使用的是LWJGL3,所以有一些差异需要一些解决方法。 我特别关注在“玩家”上创建第三人称角色。

我已经做了足够的工作,以至于当我单击并拖动屏幕时,相机会像应该的那样围绕播放器旋转。 但是,当我松开并移动鼠标进行另一次旋转时,与其从该位置继续进行操作,而是相对于我第二次单击的位置进行了重置。

由于LWJGL3没有mouse.getDY()或mouse.getDX(),因此我在DisplayManager类中制作了一个,如下所示:

public float getDY() {
    newMouseY = (float) getMouseY();
    float dy = newMouseY - oldMouseY;
    oldMouseY = newMouseY;
    return dy;
}

public float getDX() {
    newMouseX = (float) getMouseX();
    float dx = newMouseX - oldMouseX;
    oldMouseX = newMouseX;
    return dx;
}

我在相机课上这样称呼它:

private void calculatePitch(DisplayManager window) {
    if (window.isMouseDown(GLFW.GLFW_MOUSE_BUTTON_LEFT)) {
        float pitchChange = window.getDY() * 0.2f;
        pitch -= pitchChange;
    }
}

private void calculateAngleAroundPlayer(DisplayManager window) {
    if (window.isMouseDown(GLFW.GLFW_MOUSE_BUTTON_LEFT)) {
        float angleChange = window.getDX() * 0.3f;
        angleAroundPlayer -= angleChange;
    }
}

我只是不确定这是否行得通,而且我遗漏了一些确实很明显的东西,或者无法通过这种方式完成。 我是游戏开发人员的新手。

设法找出问题所在,我要做的就是在计算中按下鼠标后再次调用getDX()和getDY()函数:

private void calculatePitch(DisplayManager window) {
    if (window.isMouseDown(GLFW.GLFW_MOUSE_BUTTON_LEFT)) {
        float pitchChange = window.getDY(window) * 0.2f;
        pitch += pitchChange;
    }
    window.getDY(window);
}

private void calculateAngleAroundPlayer(DisplayManager window) {
    if (window.isMouseDown(GLFW.GLFW_MOUSE_BUTTON_LEFT)) {
        float angleChange = window.getDX(window) * 0.3f;
        angleAroundPlayer -= angleChange;
    }
    window.getDX(window);
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM