OpenGL座標變換

2021-08-01 03:52:34 字數 2938 閱讀 9115

1.x座標軸從左至右,y座標軸從下至上,z座標軸從裡至外。

2.opengl螢幕中心的座標值是x和y軸上的0.0f點。

3.中心左面的座標值是負值,右面是正值。

移向螢幕頂端是正值,移向螢幕底端是負值。

移入螢幕深處是負值,移出螢幕則是正值。

glloadidentity,函式名。該函式的功能是重置當前指定的矩陣為單位矩陣.在語義上,其等同於用單位矩陣呼叫glloadmatrix。glloadidentity,函式名。該函式的功能是重置當前指定的矩陣為單位矩陣.在語義上,其等同於用單位矩陣呼叫glloadmatrix。

沿著 x, y 和 z 軸移動。

注意在gltranslatef(x, y, z)中,當您移動的時候,您並不是相對螢幕中心移動,而是相對與當前所在的螢幕位置。其作用就是將你繪點座標的原點在當前原點的基礎上平移乙個(x,y,z)向量。

glloadidentity();         

gltranslatef(-1.5f,0.0f,-6.0f);

glbegin(gl_********s);

glvertex3f(0.0f,0.0f, 0.0f);

glvertex3f(1.0f,0.0f, 0.0f);

glvertex3f(0.0f,1.0f, 0.0f);

glend();

//該三角形繪製的座標系,實際上是以(-1.5f,0.0f,-6.0f)為原點的。

與gltranslatef(x, y, z)類似,glrotatef(angle, x, y, z)也是對座標系進行操作。

旋轉軸經過原點,方向為(x,y,z),旋轉角度為angle,方向滿足右手定則。

glloadidentity();

glrotatef(45,0.0f,0.0f,1.0f);

gltranslatef(0.0f,0.0f,-6.0f);

glbegin(gl_********s);

glvertex3f(0.0f,0.0f, 0.0f);

glvertex3f(1.0f,0.0f, 0.0f);

glvertex3f(0.0f,1.0f, 0.0f);

glend();

//繞z軸正向旋轉45度角,因為z軸正方向由螢幕內指向螢幕外,由右手定則可知方向為逆時針轉動。由於直角頂點即為原點,因此將圍繞直角逆時針旋轉。

旋轉和平移函式都存在的情況下,程式會如何執行呢?

glloadidentity();         // reset the current modelview matrix

gltranslatef(0.0f, 0.0f, -6.0f);

glbegin(gl_quads);

glvertex3f(-0.01f,-0.01f, 0.0f);

glvertex3f( 0.01f,-0.01f, 0.0f);

glvertex3f( 0.01f, 0.01f, 0.0f);

glvertex3f(-0.01f, 0.01f, 0.0f);

glend();

glloadidentity();

glrotatef(45.0f, 0.0f, 0.0f, 1.0f); //旋轉(區域性座標系的x,z軸也跟著旋轉了)

gltranslatef(1.0f,0.0f,-6.0f); //平移

glbegin(gl_********s);

glvertex3f(0.0f,0.0f, 0.0f);

glvertex3f(1.0f,0.0f, 0.0f);

glvertex3f(0.0f,1.0f, 0.0f);

glend();

如果旋轉和平移語句的順序調換一下結果會怎麼樣呢?

glloadidentity();         // reset the current modelview matrix

gltranslatef(0.0f, 0.0f, -6.0f);

glbegin(gl_quads);

glvertex3f(-0.01f,-0.01f, 0.0f);

glvertex3f( 0.01f,-0.01f, 0.0f);

glvertex3f( 0.01f, 0.01f, 0.0f);

glvertex3f(-0.01f, 0.01f, 0.0f);

glend();

glloadidentity();

gltranslatef(1.0f,0.0f,-6.0f);

glrotatef(45.0f, 0.0f, 0.0f, 1.0f);

glbegin(gl_********s);

glvertex3f(0.0f,0.0f, 0.0f);

glvertex3f(1.0f,0.0f, 0.0f);

glvertex3f(0.0f,1.0f, 0.0f);

glend();

由這三個例子可知,所有對圖形進行平移旋轉等操作的語句的執行順序都是從下到上執行的。

(感覺是從上到下執行的,不清楚怎麼回事,知道的給解釋下)

而且旋轉語句的旋轉中心知(0.0f, 0.0f, 0.0f)這個點。

glloadidentity();

glrotatef(45,0.0f,0.0f,1.0f);

glloadidentity();

gltranslatef(0.0f,0.0f,-6.0f);

glbegin(gl_********s);

glvertex3f(0.0f,0.0f, 0.0f);

glvertex3f(1.0f,0.0f, 0.0f);

glvertex3f(0.0f,1.0f, 0.0f);

glend();

在旋轉之後加了乙個復位的指令,圖形就不會旋轉了。

openGL座標變換

座標變換 opengl的每一種變換都是乙個矩陣的運算。假設當前某頂點座標為c,現在要做某種變換 設矩陣為m 得到新的座標c1,那麼運算過程就是c1 t c。opengl應用 左乘規則 座標的變換就是用變換矩陣乘以座標向量 opengl變換在程式設計的時候順序是反過來的。想對目標 glutwiresp...

OPENGL場景座標變換

我們生活在乙個三維的世界 如果要觀察乙個物體,我們可以 1 從不同的位置去觀察它。檢視變換 2 移動或者旋轉它,當然了,如果它只是計算機裡面的物體,我們還可以放大或縮小它。模型變換 3 如果把物體畫下來,我們可以選擇 是否需要一種 近大遠小 的透視效果。另外,我們可能只希望看到物體的一部分,而不是全...

OpenGL 中的座標變換

1 opengl中的變換 變換 transform 可以使3d空間中的物體投影到2d平面上。使用變換,你可以移動 旋轉 縮放甚至彎曲乙個物體。然而變換並沒有直接修改頂點 資料,取而代之,變換修改 1 opengl中的變換 變換 transform 可以使3d空間中的物體投影到2d平面上。使用變換,你...