我正在与LWJGL合作,我希望在缩放投影矩阵后选择瓷砖,但我不确定如何。我正在使用JOML作为线性代数库。投影矩阵首先应用正交变换,然后将其转换为玩家的位置,最后进行缩放。当我缩放投影矩阵时,由于鼠标中的所有内容都被缩放,因此不再选择正确的图块。这是我尝试纠正鼠标位置:
float cursorX = input.getCursorPosX() + getX();
float cursorY = input.getCursorPosY(true) + getY();
cursorX *= (1/cameraScalar);
cursorY *= (1/cameraScalar);
前两行从GLFW获取光标并将玩家位置添加到其中。第三行和第四行只乘以相机比例的倒数。
答案 0 :(得分:0)
我对JOML并不熟悉,但对于你想要做的事情的一般方法是这样的:
将实际屏幕坐标以像素为单位转换为OpenGL屏幕坐标系,这是一个位于(0,0,0)的立方体,边长为2(您可能需要反转Y轴):
float screenX = 2.0f * mouseX / screenWidth - 1.0f;
float screenY = 1.0f - 2.0f * mouseY / screenHeight;
使用投影矩阵的倒数(proj
)将带有坐标(screenX,screenY,1)的屏幕矢量投影到世界:
Vector3 screen = new Vector3(screenX, screenY, 1);
Vector3 world = proj.inverse().mul(screen);
现在world.x
和world.y
包含正确的世界坐标
答案 1 :(得分:0)
JOML提供了GLU的“unproject”功能和一个额外的“unprojectRay”。