【发布时间】:2018-10-18 05:20:24
【问题描述】:
我最近一直在关注 ThinMatrix 的关于用 Java 制作游戏的 OpenGL 教程。然而,由于他使用 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;
}
}
我只是不确定这是否应该有效,并且我遗漏了一些非常明显的东西,或者不能以这种方式完成。我是游戏开发新手。
【问题讨论】:
-
试试这个:初始化你的
oldMouseX和oldMouseY为-1。在您检测到点击的第一帧上,您不移动相机,只需将这两个变量设置为当前屏幕位置。从第二个开始,您开始旋转相机。每当您检测到玩家停止点击时,将oldMouse[X|Y]变量重置为 -1。再次点击时,重复该过程。 -
我看不到矩阵也没有变换我看到的只是更新一些没有任何顺序的欧拉角......在不知道你的坐标系、符号和变换数学的情况下,我们只能猜测看到 Understanding 4x4 homogenous transform matrices 一旦你掌握基础知识,请参阅那里的最后一个链接...播放器和相机控制示例在哪里...想法是获取播放器的直接矩阵...将其转换为相对相机位置,然后反转结果并将其用作相机...