我正在寫使用OpenGL一個MFC C++應用程序。該程序允許繪製和操作三維物體。現在我想找到座標,在與我的對象相同的座標空間中,在任何地方我點擊屏幕上的鼠標。OpenGL的座標變換Sceen到世界
到目前爲止,我一直在使用glReadPixels和gluUnProject的組合,它一直在努力,但只有當我點擊我的鼠標的地方在那裏的對象已經被繪製。如果我點擊物體外的任何地方,所獲得的座標都完全關閉。
所以我想知道如何改變我的代碼,這樣我可以找到座標空間我的對象是在屏幕上的任何位置座標。下面是我一直使用的代碼:
GLint viewport[4];
GLdouble ox, oy, oz;//the coordinates I need
GLfloat winZ = 0.0;
::glGetIntegerv(GL_VIEWPORT, viewport);
::glGetDoublev(GL_PROJECTION_MATRIX, projectionMatrix);
::glGetDoublev(GL_MODELVIEW_MATRIX, modelviewMatrix);
GLfloat winX = (float)point.x;//point.x and point.y are the mouse coordinates
GLfloat winY = (float)viewport[3] - (float)point.y;
::glReadPixels(winX, winY, 1, 1, GL_DEPTH_COMPONENT, GL_FLOAT, &winZ);
gluUnProject((GLdouble)winX, (GLdouble)winY, (GLdouble)winZ, modelviewMatrix, projectionMatrix, viewport, &ox, &oy, &oz);
你的屏幕是2D的,你的世界是3D的。屏幕上的每個2D位置不是與3D點相對應,而是與射線/線/線段相對應。出於好奇,如果'winZ'是1,'gluUnProject'會返回什麼? –
即使winZ爲1,它也會每次返回1。請問您能詳細說明每個2D點如何對應於射線/線/線段嗎?什麼是重要性和方向? –