java - Opengl如何在缩放投影矩阵的同时平移光标位置

标签 java opengl matrix

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

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

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

最佳答案

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

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

    float screenX = 2.0f * mouseX/screenWidth - 1.0f; float 屏幕Y = 1.0f - 2.0f * 鼠标Y/屏幕高度;

  2. 使用投影矩阵的逆矩阵 (proj) 将具有坐标 (screenX、screenY、1) 的屏幕 vector 投影到世界:

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

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

关于java - Opengl如何在缩放投影矩阵的同时平移光标位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43478176/

相关文章:

java - Android - 而不是启动新类(class)/Activity 的新 Intent ,如何返回打开 Activity/类(class)?

Qt OpenGL - 用鼠标拖动旋转 - 负增量

c - 将整数放入二维数组(矩阵)

java - 如何检查客户端 Java 版本?

java - 作为随机类种子的最佳数字

java - Java 中的多线程任务仅在 onClick Button 时工作一次

c++ - 只有一种 Material 应用于多个对象

c++ - 无法在 openGL 和 GLUT 中为我想要的确切对象制作动画

java - 从相机坐标计算世界坐标

php - 矩阵上推荐的空闲单元格。使用 MySQL