我是跟随本教程的3D游戏开发与LWJGL和OpenGL。在本系列中,讲师使用LWJGL 2,而我使用LWJGL 3和GLFW。在某一节中,他只使用LWJGL 2中提供的LWJGL的输入实现,所以我不得不使用GLFW的回调系统。我能够为键输入、光标移动和鼠标按钮输入添加输入功能,但当我尝试添加滚动回调时,偏移量似乎只返回-1和1用于滚动方向,而当添加时,(第3人称)摄像机无限期地向前和向后转换,其意图是对于每一个滚动运动,相机向前或向后转换一定的距离。实际上,我希望得到每个滚动运动的增量值。在此之前,我曾试图查看是否可以将偏移量值设置为一定的延迟时间,然后将其设置为0,但没有效果。我试着寻找答案,但没有发现任何与我的问题相关的东西。我可能很蠢,但这是密码。
MouseScroll回调类:
代码语言:javascript运行复制import org.lwjgl.glfw.GLFWScrollCallback;
public class MouseScroll extends GLFWScrollCallback {
private static float XScroll;
private static float YScroll;
private static float DXScroll;
private static float DYScroll;
@Override
public void invoke(long window, double xoffset, double yoffset) {
XScroll = (float) xoffset;
YScroll = (float) yoffset;
// Don't know how to achieve this here
}
/* Returns raw offset values */
public float getXScroll() {
return XScroll;
}
public float getYScroll() {
return YScroll;
}
/* Returns the rate of each scrolling movement */
public float getDXScroll() {
return DXScroll;
}
public float getDYScroll() {
return DYScroll;
}
}获取输入类中的YScroll的方法:
代码语言:javascript运行复制public static float getMouseYScroll() {
return mouseScroll.getYScroll(); // mouseScroll is reference to MouseScroll callback
}方法在Camera.java中使用回调:
代码语言:javascript运行复制private void calculateZoom() {
float zoomLevel = Input.getMouseYScroll() * 0.1f;
distanceFromPlayer -= zoomLevel;
}Camera.java中的更新方法:
代码语言:javascript运行复制public void move() {
calculateZoom();
calculatePitch();
calculateAngleAroundPlayer();
float horizontalDistance = calculateHorizontalDistance();
float verticalDistance = calculateVerticalDistance();
calculateCameraPosition(horizontalDistance, verticalDistance);
this.yaw = 180 - (player.getRotY() + angleAroundPlayer);
} 最后,有一个camera.move()被调用为每一个循环迭代。