OpenGL 螢幕座標到物體三維座標的轉換

2021-08-29 22:48:22 字數 1256 閱讀 7153

直接看**吧,有注釋。

//入參: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分量...