1、tao.Opengl技術簡介緩存
Opengl是一種C風格的圖形庫,即opengl中沒有類和對象,只有大量的函數。Opengl在內部就是一個狀態機,利用不一樣的函數來修改opengl狀態機的狀態,以達到須要的效果。框架
Tao框架是C#使用Opengl的一種圖形庫,其餘可供C#使用的圖形庫有諸如Sharpgl等。Tao框架包含了許多C庫,如表1。Tao庫結合了C#語言的特色,使得在使用Tao庫時更加方便。函數
|
庫工具 |
用途字體 |
1 spa |
Tao.OpenAl3d |
豐富的音頻庫orm |
2 視頻 |
Tao.OpenGl對象 |
便可使用的圖形庫 |
3 |
Tao.Sdl |
Simple DirectMedia Layer,2D庫 |
4 |
Tao.Platform.Windows |
支持經過Windows.Forms使用OpenGl |
5 |
Tao.PhysFs |
一個I/o包裝器,支持遊戲資源存檔等 |
6 |
Tao.FreeGlut |
Opengl實用程序工具包是一組包裝器,用於設置Opengl程序和一些繪圖例程 |
7 |
Tao.Ode |
全稱是Open Dynamics Engine是在遊戲中使用的一個實時物理引擎 |
8 |
Tao.Glfw |
OpenGl Framework可在不一樣平臺使用的輕量級包裝類 |
9 |
Tao.DevIL |
將各類不一樣格式的圖片(bmp、tif等)加載到Opengl |
10 |
Tao.Cg |
高級着色語言工具 |
11 |
Tao.Lua |
Lua是遊戲界最經常使用的腳本語言 |
12 |
Tao.FreeType |
字體包 |
13 |
Tao.FFmpeg |
主要用於播放視頻 |
表1 Tao庫
2、C# Form類
窗體是程序與用戶交互的可視界面,窗體也是一個對象,窗體類定義了生成窗體的模版,實例化一個窗體類就產生了一個窗體。.NET框架類庫的System.Windows.Forms命名空間中定義的Form類是全部窗體類的基類。
2.1 其主要屬性包括窗前名稱、圖標、其實位置、背景。
1. Name:用來獲取或設置窗體的名稱,在應用程序中可經過Name屬性來引用窗體。
2. StartPosition:用來獲取或設置運行時窗體的起始位置。
3. AutoScroll:用來獲取或設置是否實現自動滾動。
4. Visible:用於獲取或設置一個值,該值指示是否顯示該窗體或控件。值爲true時顯示窗體或控件,爲false時不顯示。
2.2 窗體經常使用的方法包括:
1. Show(),該方法的做用是讓窗體顯示出來。
2. Refresh(),該方法的做用是刷新並重畫窗體。
3. Close(),該方法的做用是關閉窗體。
2.3 窗體的主要事件包括:
1. Load事件:該事件在窗體加載到內存時發生,即在第一次顯示窗體前發生。
2. Activated事件:該事件在窗體激活時發生。
3. Deactivate事件:該事件在窗體失去焦點成爲不活動窗體時發生。
4. Resize事件:該事件在改變窗體大小時發生。
5. Paint事件:該事件在重繪窗體時發生。
6. Click事件:該事件在用戶單擊窗體時發生。
7. Closed事件:該事件在窗體關閉時發生。
3、SimpleOpenglControl應用
在動態連接庫Tao.Platform.Windows中定義的SimpleOpenglControl類,其定義了幾乎全部的Opengl主要繪圖函數,包括場景初始化函數、場景繪製渲染函數、雙緩存交換函數、重繪函數、窗口大小改變等等。在Form的派生類中添加一個內部的simpleOpenglControl類,就能使用它的全部屬性和方法。
從關係圖中能夠看出模型類能夠分爲兩部分,模型繪製和模型展現。模型繪製須要調用Tao.Opengl庫的函數,而且渲染模型;模型展現則須要利用Form類和simpleOpenglControl類來實現。具體過程以下:
1)首先simpleOpenglControl類對象加載Load事件和SizeChanged事件;
2)而後在初始化函數中加載FormLoad事件;
3)最後simpleOpenglControl類對象加載Paint事件,實現重繪;
4)利用設置的timer事件來實現按期更新重繪模型。
4、Opengl繪製函數
Opengl其實是一個C庫函數,即沒有類或對象,Tao庫其實是將全部函數封裝在了不一樣的類中,如OpenGl類,SimpleOpenglControl類等等。在建模過程當中使用的主要的函數如表2所示。
函數名稱 |
主要用途 |
glPushMatrix() |
將當前矩陣保存如棧頂,保證在其中運行的縮放、平移等變換不影響其餘矩陣 |
glPopMatrix() |
與glPushMatrix相對應,將當前矩陣彈出棧頂,二者需一塊兒出現 |
glRotated() |
將相乘旋轉矩陣的當前的矩陣,參數包括旋轉角度和旋轉中心 |
glScaled() |
縮放函數,參數是xyz方向上的縮放比 |
glTranslated() |
平移函數,參數爲xyz方向上的平移大小 |
glEnable() |
啓用相關功能函數,功能由參數決定,如畫虛線等 |
glDisable() |
關閉相關功能函數,通常與glEnable一塊兒出現 |
glLineWidth() |
用於指定繪製線段的像素寬度,參數爲像素大小 |
glColor3d() |
用於指定RGB顏色,參數爲RGB值 |
glVertex3d() |
用於指定三維頂點,參數爲三維頂點值 |
glBegin() |
繪圖初始化函數,參數通常包括繪製頂點模式、線段模式等 |
glEnd() |
與glBegin一塊兒使用,在二者之間繪製圖形 |
glViewPort() |
用於肯定打開窗口的座標範圍 |
glClearColor() |
清除窗口顏色 |
glLoadIndentity() |
重置當前指定的矩陣爲單位矩陣 |
glMatrixMode() |
指定哪個矩陣是當前矩陣 |
glOrtho() |
glOrtho函數是將當前的可視空間設置爲正投影空間 |
gluLookat() |
視點轉換函數,參數包括視點位置,視點對準的物體在世界座標的位置和視點向上的方向在世界座標中的方向 |
表2 主要建模函數