1. 程式人生 > >C#應用視頻教程2.2 OPENGL虛擬仿真介紹

C#應用視頻教程2.2 OPENGL虛擬仿真介紹

數量 時間 陰影 alt 一個 image end disable sha

三維在理解了如何繪制2D元素之後,我們嘗試繪制3D元素。

其實多個三角形也能夠成四面體,多個長方形也能夠成六面體,所以繪制3D元素的時候,只要頂點數量匹配就行了

技術分享

?

這裏我們尤其註意,我把繪制之前的三個平移和三個旋轉單獨拿出來做成變量,如果你的TranslateZ默認值是0的話,你默認看到的是黃色面,如果把TranslateZ設置為負值,則看到了紅色,且越來越小,如果把TranslateZ設置為正數,則啥也看不到了。這裏讀者還需要有一個額外的空間想象能力,就是你的觀察視角在哪裏。默認的時候你的觀察視角就在畫筆的位置,所以你就相當於眼球貼著畫布,你只能看到一面色彩,如果空間的畫筆(註意不是平面的畫筆)TranslateZ有數值了,則相當於畫筆擡起離開了畫布,或者往裏戳穿了畫布在畫東西(每一個渲染周期都是把之前畫的都扔掉,重新畫筆平移+旋轉+繪制),所以此時我們應該想象成你拿著一只畫筆在空間畫3D圖(先這麽理解,後面這個觀察視角的問題我會另外介紹)

技術分享

?

我們前面一直在用顏色繪制圖像,除了顏色也可以用貼圖的方法。註意要使用SharpGL自帶的類型。此外要開啟允許紋理圖片(所謂的gl.Enable(XXX) 和gl.Disable(XXX)就是打開和關閉的閥門,OPENGL是一個狀態機,他在運行的時候每個周期就是清空畫布,重新畫圖,在畫圖的時候你隨時可以打開和關閉一些閥門,比如紋理,材質,光照,漫反射等等效果,這個我們後面會逐漸深入講解)

技術分享

?

不啟用紋理之後,看到的圖像就沒有3D效果了(比貼了顏色還難看)

技術分享

?

在繪制的時候我們把前面的一個gl.Begin-gl.End分成了六個,每個單獨繪制(如果你在某些代碼中發現別人寫gl.Begin(7),不要覺得很奇怪,因為gl.Begin(OpengGL.GL_QUADS)這個立方體就是uint類型,就是7,前面OPENGL很多開啟和關閉的功能也是一個uint類型)gl.Normal是指定面的法向,指定面的方向可以讓光照效果更加逼真,尤其是在導入大型3D物體的時候,實際上再復雜的3D物體也是多個三角形面片組成的(TRIANGLE),如果你不為每個三角面片指定法向,則整個3D物體看起來會像平面的一樣

技術分享

?

講到光照,就可以把有沒有光照的對比放在一起講。開啟光照之後,讀者可以自己體會把立方體從左邊運動到右邊的效果變化(目前可以認為光照是一個小臺燈,而且位置是死的,所以距離太遠就越來越暗,甚至直接看不到,如果關閉光照效果,則不會由於位置的變化而有陰影)

技術分享

?

光照其實也是可以設置的非常復雜的,我們不是做大型遊戲,所以一般涉及不到(個人認為也沒有必要在這些事情上浪費太多時間),我們這裏設置的光源位置,環境光,漫射光之類的參數直接照抄就行了(後面介紹顏色紋理的時候用得上,因為大部分時候還是用顏色在著色,單純顏色和顏色紋理效果還是區別挺大的,顏色紋理如同純黑的柱子在光照下顯得明暗很逼真,而單純的顏色畫筆就黑的沒什麽特點,繪制一個球馬上就能看出來)

技術分享

?

?

更多教學視頻和資料下載,歡迎關註以下信息:

我的優酷空間:

http://i.youku.com/acetaohai123

技術分享

?

我的在線論壇:

http://csrobot.gz01.bdysite.com/

技術分享

?

問題交流:

QQ:910358960

郵箱:[email protected]

?

?

C#應用視頻教程2.2 OPENGL虛擬仿真介紹