OPENGL場景座標變換

2021-06-20 02:54:03 字數 1997 閱讀 8930

我們生活在乙個三維的世界——如果要觀察乙個物體,我們可以:

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平面上。使用變換,你...