直接看**吧,有注釋。
//入參:int x,int y 表示螢幕的座標
glint viewport[4] = ;
gldouble modelview[16] = ;
gldouble projection[16] = ;
glfloat winx = 0.0f;
glfloat winy = 0.0f;
glfloat winz = 0.0f;
gldouble posx = 0.0f;
gldouble posy = 0.0f;
gldouble posz = 0.0f;
glpushmatrix();//入棧:儲存當前矩陣資訊
// 引數要和繪圖的時候一模一樣
glortho(......);//注意這裡,我這裡是正交投影,請根據情況而定。
glulookat(......);
// 這裡的變換要和你繪圖的時候的變換順序和引數一樣,且必須要一樣。
glscalef(......); // 縮放、平移、旋轉變換
glrotatef(..., 1.0f, 0.0f, 0.0f);
glrotatef(..., 0.0f, 1.0f, 0.0f);
glrotatef(..., 0.0f, 0.0f, 1.0f);
gltranslatef(......);
glgetintegerv(gl_viewport, viewport); // 這個地方你仔細觀察,會發現viewport就是你視窗的大小範圍
glgetdoublev(gl_modelview_matrix, modelview);//獲取模型檢視矩陣
glgetdoublev(gl_projection_matrix, projection);//獲取投影矩陣
glpopmatrix();//出棧,恢復剛剛入棧的矩陣資訊
winx = x;
winy = width - y; //width為螢幕的寬度(在qt中需要更改為height,既高度)
//讀取螢幕深度
glreadpixels((int)winx, winy, 1, 1, gl_depth_component, gl_float, &winz);
//座標轉換
gluunproject(winx, winy, winz, modelview, projection, viewport, &posx, &posy, &posz);
螢幕座標向opengl三維座標轉換
很多人用opengl繪圖會遇到乙個問題即螢幕座標向opengl座標轉換,在網上流傳著如下類似的 glint viewport 4 gldouble modelview 16 gldouble projection 16 glfloat winx,winy,winz gldouble posx,pos...
OpenGL由螢幕座標轉換三維座標
很多人用opengl繪圖會遇到乙個問題即螢幕座標向opengl座標轉換,在網上流傳著如下類似的 glint viewport 4 gldouble modelview 16 gldouble projection 16 glfloat winx,winy,winz gldouble posx,pos...
opengl中將三維座標轉換到螢幕座標
opengl的通過四個變換,得到的結果就是螢幕上的畫素座標。前三個變換 model,view,projection 都是4x4矩陣,操作物件是四維向量,所以需要把 x,y,z 補上w分量,變成 x,y,z,1 然後把前三個變換的矩陣依次左乘到這個向量上,得到的四維向量做齊次除法 所有分量都除以w分量...