opengl中場景變換|2D與3D互轉換
我們生活在一個三維的世界——如果要觀察一個物體,我們可以:
1、從不同的位置去觀察它。(視圖變換)
2、移動或者旋轉它,當然了,如果它只是計算機里面的物體,我們還可以放大或縮小它。(模型變換)
3、如果把物體畫下來,我們可以選擇:是否需要一種“近大遠小”的透視效果。另外,我們可能只希望看到物體的一部分,而不是全部(剪裁)。(投影變換)
4、我們可能希望把整個看到的圖形畫下來,但它只占據紙張的一部分,而不是全部。(視口變換)
這些,都可以在OpenGL中實現。
墨卡托坐標變換
OPENGL-----3D到2D坐標變換
OPENGL-----2D到3D坐標變換
2D到3D的變換其實是3D到2D的逆變換
1.視口變換
使用glViewport來定義視口。其中前兩個參數定義了視口的左下腳(0,0表示最左下方),后兩個參數分別是寬度和高度。
glViewport負責把視景體截取的圖像按照怎樣的高和寬顯示到屏幕上。
效果如圖:
2.透視投影
glMatrixMode(GL_PROJECTION); // 設置當前矩陣為投影矩陣。
glLoadIdentity(); // 重置當前指定的矩陣為單位矩陣
將當前的用戶坐標系的原點移到了屏幕中心:類似於一個復位操作。
glLoadIdentity該函數的功能是重置當前指定的矩陣為單位矩陣.在語義上,其等同於用單位矩陣調用glLoadMatrix。
glFrustum(l, r, b, t, n, f); //將當前矩陣與一個透視矩陣相乘,把當前矩陣轉變成透視矩陣
該函數構造了一個視景體用來將模型進行投影,來裁剪模型,決定模型哪些在視景體里面,哪些在視景體的外面,在視景體之外的就不可見。
注:通常,glMatrixMode和glLoadIdentity一同使用,用於矩陣模式切換。
3.模型變換
glMatrixMode(GL_MODELVIEW); glLoadIdentity(); glScissor(0, 0, iWidth, iHeight);
glScissor裁剪函數,指定裁剪的寬高。
glTranslate*,把當前矩陣和一個表示移動物體的矩陣相乘。三個參數分別表示了在三個坐標上的位移值。
glRotate*,把當前矩陣和一個表示旋轉物體的矩陣相乘。物體將繞着(0,0,0)到(x,y,z)的直線以逆時針旋轉,參數angle表示旋轉的角度。
glScale*,把當前矩陣和一個表示縮放物體的矩陣相乘。x,y,z分別表示在該方向上的縮放比例。
參考網址:
http://blog.csdn.net/a49688448/article/details/17999923