我正在使用 LWJGL,我希望在缩放投影矩阵后选择图 block ,但我不确定如何进行。我正在使用 JOML 作为线性代数库。投影矩阵首先应用正交变换,然后将其转换为玩家的位置,最后进行缩放。当我缩放投影矩阵时,因为所有内容都被放大,鼠标不再选择正确的图 block 。这是我尝试纠正鼠标位置:
float cursorX = input.getCursorPosX() + getX();
float cursorY = input.getCursorPosY(true) + getY();
cursorX *= (1/cameraScalar);
cursorY *= (1/cameraScalar);
前两行从 GLFW 获取光标并将玩家位置添加到其中。第三行和第四行只是乘以相机比例的倒数。
最佳答案
我不熟悉 JOML,但您想要做的事情的一般方法是这样的:
将真实屏幕坐标(以像素为单位)转换为 OpenGL 屏幕坐标系,该坐标系是一个位于 (0,0,0) 且边长为 2 的立方体(您可能需要反转 Y 轴):
float screenX = 2.0f * mouseX/screenWidth - 1.0f; float 屏幕Y = 1.0f - 2.0f * 鼠标Y/屏幕高度;
使用投影矩阵的逆矩阵 (
proj
) 将具有坐标 (screenX、screenY、1) 的屏幕 vector 投影到世界:Vector3 screen = new Vector3(screenX, screenY, 1); Vector3 world = proj.inverse().mul(screen);
现在
world.x
和world.y
包含正确的世界坐标
关于java - Opengl如何在缩放投影矩阵的同时平移光标位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43478176/