0
我想寫一個OpenGL應用程序,從一個點(在這種情況下是0,0,0)觸發一個對象,鼠標的x,y位置。這是我目前使用的系統: 在點0,0,0處創建一個對象 獲取鼠標的x,y位置。 將鼠標轉換爲三維座標。 獲取遠平面設置爲4,294,967,295的起點和(鼠標-X,m鼠標-Y,遠平面)之間的一條直線。 使用參數線方程沿該線移動物體。創建一個向量從一個點到鼠標的x,y,OpenGL,C++
問題是遠平面上的x,y似乎不對應於x,y鼠標位置,因此對象飛行錯誤。我很確定/ para,etric equation部分工作正常,但2d和3-d空間之間的轉換可能不行。這是我曾嘗試:
首先轉換爲窗口座標:
POINT *mouse = new POINT();
mouse->x = mousePosition3D.x;
mouse->y = mousePosition3D.y;
ScreenToClient(windowHandle, mouse);
然後以3-d座標
GLint viewport[4];
GLdouble modelview[16];
GLdouble projection[16];
GLfloat winX, winY, winZ;
GLdouble posX, posY, posZ;
OBJ_TriCo returnMe;
//All matrices in use need to be retrived
glGetDoublev(GL_MODELVIEW_MATRIX, modelview);
glGetDoublev(GL_PROJECTION_MATRIX, projection);
glGetIntegerv(GL_VIEWPORT, viewport);
//Set the co-ords to lookup, based on the mouse position passed to this
winX = (float)x;
winY = (float)viewport[3] - (float)y;
//Set the z to 0.99, for some reason the object will fly totally incorrectly otherwise
winZ = 0.999; //Get a point on the bettween FAR and NEAR-Clipping planes
//Convert the co-ords
gluUnProject(winX, winY, winZ, modelview, projection, viewport, &posX, &posY, &posZ);
//Return there values
returnMe.x = posX;
returnMe.y = posY;
returnMe.z = posZ;
return returnMe;
我想知道有任何的身體做類似的事情或者我可能需要做些什麼才能讓物體沿着正確的路線飛行。