我們生活在乙個三維的世界——如果要觀察乙個物體,我們可以:
1、從不同的位置去觀察它。(檢視變換)
2、移動或者旋轉它,當然了,如果它只是計算機裡面的物體,我們還可以放大或縮小它。(模型變換)
3、如果把物體畫下來,我們可以選擇:是否需要一種「近大遠小」的透視效果。另外,我們可能只希望看到物體的一部分,而不是全部(剪裁)。(投影變換)
4、我們可能希望把整個看到的圖形畫下來,但它只佔據紙張的一部分,而不是全部。(視口變換)
這些,都可以在opengl中實現。
墨卡托座標變換
opengl-----3d到2d座標變換
opengl-----2d到3d座標變換
2d到3d的變換其實是3d到2d的逆變換
1.視口變換
glviewport(0, 0, iwidth, iheight); // 設定opengl視口大小。
使用glviewport來定義視口。其中前兩個引數定義了視口的左下腳(0,0表示最左下方),後兩個引數分別是寬度和高度。
glviewport負責把視景體擷取的影象按照怎樣的高和寬顯示到螢幕上。
效果如圖:
2.透視投影
glmatrixmode(gl_projection); // 設定當前矩陣為投影矩陣。
glmatrixmode設定當前矩陣模式:
gl_modelview,對
模型視景矩陣堆疊應用隨後的矩陣操作.
gl_projection,對投影矩陣應用隨後的矩陣操作.
gl_texture,對紋理矩陣堆
棧應用隨後的矩陣操作.
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分別表示在該方向上的縮放比例。
openGL座標變換
座標變換 opengl的每一種變換都是乙個矩陣的運算。假設當前某頂點座標為c,現在要做某種變換 設矩陣為m 得到新的座標c1,那麼運算過程就是c1 t c。opengl應用 左乘規則 座標的變換就是用變換矩陣乘以座標向量 opengl變換在程式設計的時候順序是反過來的。想對目標 glutwiresp...
OpenGL座標變換
1.x座標軸從左至右,y座標軸從下至上,z座標軸從裡至外。2.opengl螢幕中心的座標值是x和y軸上的0.0f點。3.中心左面的座標值是負值,右面是正值。移向螢幕頂端是正值,移向螢幕底端是負值。移入螢幕深處是負值,移出螢幕則是正值。glloadidentity,函式名。該函式的功能是重置當前指定的...
OpenGL 中的座標變換
1 opengl中的變換 變換 transform 可以使3d空間中的物體投影到2d平面上。使用變換,你可以移動 旋轉 縮放甚至彎曲乙個物體。然而變換並沒有直接修改頂點 資料,取而代之,變換修改 1 opengl中的變換 變換 transform 可以使3d空間中的物體投影到2d平面上。使用變換,你...