2017-04-18 17 views
1

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

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

前两行从GLFW得到光标,并增加了球员的位置了。第三行和第四行乘以相机比例的倒数。

回答

0

我不熟悉JOML,但你想要做什么,一般的方法是这样的:

  1. 像素变换实际画面COORDS OpenGL的屏幕坐标系统,这是一个立方体坐(0,0,0),长度为2的侧面(你可能会需要反转Y轴):与COORDS(screenX,screenY,1)世界

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

  2. 项目屏幕采用矢量投影矩阵的逆IX(proj):

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

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

0

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