首先,让我们看看Mouse.grab(true)做什么。有两种截然不同的操作,全部分组为一个呼叫。第一个是将光标固定在屏幕中央,第二个是使光标不可见。这两种操作相结合都会将光标锁定在屏幕的中心。为了得到输入(我假设你已经使用这种方法进行相机移动),你必须使用鼠标类的差分位置函数Mouse.getDX()和Mouse.getDY(),它们返回光标光标位置的变化(有效地多少用户已经移动鼠标)这个框架。
现在,在3D游戏中,您倾向于使用十字准线。这不会被误认为是鼠标。十字准线是绘制在场景(以及帧缓冲区(屏幕)的中心)上的UI元素,其给出了玩家关于屏幕中心位置的参考点,并且在射击游戏中,子弹他们会拍摄出来,让他们瞄准。
在这里,我将提供一个简短的例子,说明如何实现这种效果。 如果你使用直接模式和固定管道(GL11)或后续版本,这个代码将会有很大的不同,这取决于你如何做图形,因此,这将主要是伪代码。随意指定你正在使用的渲染方法,我可以给你一个更详细的例子。
// Your 3D render code here
float aspectRatio = Dislay.getWidth()/(float) Display.getHeight();
// will depend on your rendering implementation
// however the concept stays the same, you switch from a perspective view
// to an orthogonal view
switch_projection_matrix_to_ortho(-1 * aspectRatio, 1 * aspectRatio, -1, 1, -1, 1);
// Apply a crosshair texture
crossahir_texture.bind()
// Draw a quad
quad.draw()
希望这有助于!