【问题标题】:How to translate the cursor position alongside scaling the projection matrix Opengl如何在缩放投影矩阵Opengl的同时平移光标位置
【发布时间】:2017-04-18 17:03:24
【问题描述】:

我正在使用 LWJGL,我希望在缩放投影矩阵后选择图块,但我不确定如何。我将 JOML 用于线性代数库。投影矩阵首先应用正交变换,然后将其转换为玩家的位置,最后对其进行缩放。当我缩放投影矩阵时,因为一切都在放大鼠标不再选择正确的瓷砖。这是我尝试修正鼠标位置:

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

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

【问题讨论】:

    标签: java opengl matrix


    【解决方案1】:

    我不熟悉 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 包含正确的世界坐标

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 2021-10-11
        • 1970-01-01
        • 2019-03-05
        • 2015-11-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-04-11
        • 1970-01-01
        相关资源
        最近更新 更多