進一步掌握二維、三維變換的數學知識、變換原理、變換種類、變換方法;進一步理解採用齊次座標進行二維、三維變換的必要性;利用opengl實現二維、三維圖形變換。
2.實驗內容:
(1) 掌握二維、三維變換的原理及數學公式;
(2) 利用opengl實現二維、三維圖形變換,在螢幕上顯示變換過程或變換結果。
opengl的三個基本幾何變換函式介紹如下:
(1)平移變換
平移變換函式如下:
void gltranslate(type x,type y,type z);
三個函式引數就是目標分別沿三個軸向平移的偏移量。這個函式表示用這三個偏移量生成的矩陣乘以當前矩陣。當引數是(0.0,0.0,0.0)時,表示對函式gltranslate*()的操作是單位矩陣,也就是對物體沒有影響。
(2)旋轉變換
旋轉變換函式如下:
void glrotate(type angle,type x,type y,type z);
函式中第乙個引數是表示目標沿從點(x,y,z)到原點的方向逆時針旋轉的角度,後三個引數是旋轉的方向點座標。這個函式表示用這四個引數生成的矩陣乘以當前矩陣。當角度引數是0.0時,表示對物體沒有影響。
(3)比例變換
比例變換函式如下:
void glscale(type x,type y,type z);
三個函式引數值就是目標分別沿三個軸向縮放的比例因子。這個函式表示用這三個比例因子生成的矩陣乘以當前矩陣。這個函式能完成沿相應的軸對目標進行拉伸、壓縮和反射三項功能。當引數是
(1.0,1.0,1.0)
時,表示對函式
glscale*()
操作是單位矩陣,也就是對物體沒有影響。當其中某個引數為負值時,表示將對目標進行相應軸的反射變換,且這個引數不為
1.0,則還要進行相應軸的縮放變換。最好不要令三個引數值都為零,這將導致目標沿三軸都縮為零。
有關opengl變換詳細內容還可參看:
#include
#include
glfloat rtri;//
金字塔旋轉角度
void init(void)
void display(void)
void reshape (int width, int height)
void keyboard(unsigned char key, int x, int y)
} int main(int argc, char** argv)
這個程式需要注意的地方有幾點。
使用了雙快取模式,程式在空閒時一直不停的呼叫
display
函式,這個函式繪製完影象後,改變旋轉的角度,然後交換雙快取,這樣,每畫完一幀就交換,形成了動畫。
另外,使用了深度快取,啟用了深度測試,這樣,被遮擋的面就不會顯示,大家可以把啟用深度快取的一行去掉看看效果。大家還可以改變變換的方式,達到不同的效果。
參考"cg實驗指導四參考例項
turtlebot2 機械比版總結
8.解決lock問題 sudo rm rf var lib dpkg lock var lib dpkg lock為lock物件 libtiff4 dev 9.orb slam執行總結 主要參考 在ros中使用usb攝像頭跑orb slam2 主要參考 ubuntu16.04 ros usb攝像頭跑...
機械設計電子版 非標機械設計有哪些設計過程?
一 非標設計的目的1 提高產品質量 2 提高效率 3 確保生產安全。二 非標機械設計必備3 裝置運動軌跡無非是直線或旋轉,掌握這些機械原理,再結合電氣,氣動和液壓就能設計出非標裝置,好壞另說。三 非標機械設計準備1 了解裝置的用途,是加工裝置?還是試驗裝置?或是工裝夾具。加工裝置 首先保證加工精度,...
機械人迷城手機版 機械迷城手機版
機械迷城手機版是奇幻風格的解謎遊戲。遊戲畫面採用彩色鉛筆畫的機械人世界。腐蝕老舊的樣子看起來讓人感受到親切感。快來和機械人一起探索這個世界吧 遊戲介紹 陳舊鏽蝕卻又格外親切的城市 遊戲中的解謎要素在 machinarium 中的機器人們看起來意外的老舊 鏽蝕,卻因手繪的關係而讓人感到獨特的親切感。這...