如何平移光标位置以及缩放投影矩阵Opengl

时间:2017-04-18 17:03:24

标签: java opengl matrix

我正在与LWJGL合作,我希望在缩放投影矩阵后选择瓷砖,但我不确定如何。我正在使用JOML作为线性代数库。投影矩阵首先应用正交变换,然后将其转换为玩家的位置,最后进行缩放。当我缩放投影矩阵时,由于鼠标中的所有内容都被缩放,因此不再选择正确的图块。这是我尝试纠正鼠标位置:

 float cursorX = input.getCursorPosX() + getX();
 float cursorY = input.getCursorPosY(true) + getY();
 cursorX *= (1/cameraScalar);
 cursorY *= (1/cameraScalar);

前两行从GLFW获取光标并将玩家位置添加到其中。第三行和第四行只乘以相机比例的倒数。

2 个答案:

答案 0 :(得分:0)

我对JOML并不熟悉,但对于你想要做的事情的一般方法是这样的:

  1. 将实际屏幕坐标以像素为单位转换为OpenGL屏幕坐标系,这是一个位于(0,0,0)的立方体,边长为2(您可能需要反转Y轴):

    float screenX = 2.0f * mouseX / screenWidth - 1.0f; float screenY = 1.0f - 2.0f * mouseY / screenHeight;

  2. 使用投影矩阵的倒数(proj)将带有坐标(screenX,screenY,1)的屏幕矢量投影到世界:

    Vector3 screen = new Vector3(screenX, screenY, 1); Vector3 world = proj.inverse().mul(screen);

  3. 现在world.xworld.y包含正确的世界坐标

答案 1 :(得分:0)

JOML提供了GLU的“unproject”功能和一个额外的“unprojectRay”。