OpenGL座標變換 平移,縮放與旋轉

2021-07-30 12:07:54 字數 1882 閱讀 8606

opengl座標變換 平移,縮放與旋轉

opengl有內建的座標系,事實上opengl有兩套座標系,乙個座標系被稱為眼睛座標(eye coordinate system) 簡稱ecs 。

opengl還有一套座標,被稱為(object coordinate system) 簡稱ocs ,而這個才是更為重要的,其實我們用來繪圖的正是ocs。

兩個座標系中ecs 可以看成是乙個現實存在的 基本不變的全域性座標系,而ocs則可以看成是使用者自定義的座標系,我們可以將這個座標系任意的平移與縮放,在初始情況下他和ecs是重合的,也可以通過glloadidentity()強制復位,這樣可以給我們的繪圖帶來極大的方便。這裡有一點是要值得注意的是在使用乙個函式時需要弄清它是使用什麼座標系的,剛剛我們用到的glvertex系列函式都是用的ocs

下面是乙個平移和縮放例子:

#include#include #include void makecross(float *color) //在當前ocs的中心畫乙個十字

void display()

; float blue[3]=;

float green[3]=;

float yellow[3]=;

glclearcolor(1,1,1,1);

glclear(gl_color_buffer_bit);

glloadidentity();

makecross(red);

gltranslatef(-0.5,-0.5,0);//座標平移

//glloadidentity();//座標復位

makecross(blue);

//gltranslatef(1,0.25,0);

//makecross(green);

//gltranslatef(-0.75,0.75,0);

//glscalef(0.5,0.5,1); //在x,y 上縮小一半

//makecross(yellow);

glflush(); //更新視窗

}int main(int argc, char *argv)

這兩個函式中makecross的作用是在座標中心畫乙個十字,前面我們知道glvertex使用的是ocs 所以makecross 的作用便是在當前ocs的中心畫乙個十字,以觀察ocs的位置,

glcolor3fv(color)的功能於之前我們看到的glcolor3f(r,g,b)是一樣的,只不過乙個是使用乙個陣列作為引數

1. voidglloadidentity(void)

在display中 glloadidentity 的作用是使ocs 與ecs 重合,在這裡我們用來初始化ocs 

2. voidgltranslate(typex, type y, typez);

gltranslatef 是將ocs平移至x,y,z 出,也就是在(x,y,z)處建立新的ocs,這裡要注意這裡的引數x,y,z也是ocs座標

3. voidglscale(typex, type y, typez);

glscalef則是當前ocs的縮放,x,y,z 分別指在三個方向上的放大倍數

說完了縮放和平移,我們來看看旋轉,opengl 裡的旋轉是通過glrotate來實現的,他的本質是將當前矩陣在乘於旋轉矩陣,就是將當前的ocs 旋轉乙個指定的角度

4. voidglrotate(type angle, type x, type y, type z);

glrotate 是將當前ocs繞向量(x,y,z)逆時針旋轉angle度 例如我們要講上例中的圖形旋轉繞z軸旋轉45度則可以通過glrotatef(45,0,0,1)來實現。

OpenGL與旋轉 縮放 平移

2018 05 09 旋轉看起來挺費勁的,其實非常簡單。我們只需要給shader傳入mvp矩陣即可。旋轉分為兩類 camera旋轉 物體旋轉。當指定mvp矩陣時,model矩陣是每個物體攜帶的資料,projection矩陣是由camera 的fov aspect near far距離決定的,對於ca...

變換(旋轉 縮放 平移)

scale 縮放 rotate 旋轉 shear 裁切 為什麼 是什麼 affifine map 仿射變換 引入齊次座標後的二維變換 復合變換 旋轉 4.1 尤拉角 為什麼 是什麼 4.2 萬向節死鎖 轉動的術語 出現死鎖 這裡桶滾自由度丟失了,只有兩個自由度,無法表示需要三個自由度的旋轉,產生了死...

openGL座標變換

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