2017-04-18 64 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」。