1. 程式人生 > >學習3D地圖引擎開發技術心得

學習3D地圖引擎開發技術心得

現在市場上關於學習3D技術的書籍很多,有很多寫的確實很好。個人認為好書的話一本就夠了,書太多看的頭暈眼花的也消化不了。我從開始學習到現在開了不下百本的相關資料,但主要還是圍繞著基本學習資料在看。重要的是把一本書上的東西吃透就行。先說說我是怎麼學的,各位也幫著我指導一下。

<!--[if !supportLists]-->1,  <!--[endif]-->由於從沒接觸過3D之類的開發(不過以前就是做軟體的,還好有這個基礎),什麼D3D啊,OpengGL啊,一概不知。所以就先從最簡單的開始。先了解3D引擎的軟體實現原理,也就是軟體3D圖形引擎。這裡推薦一本好書《3D遊戲程式設計大師技巧》,這本是完全將的是軟體實現方法,為啥都不懂的我做了一下啟蒙教育。

<!--[if !supportLists]-->2,  <!--[endif]-->在熟悉、瞭解、掌握了以上的知識之後,開始自己動手用軟體的方式實現了一個3D地圖引擎。很粗糙,但廖勝於無。同時在實現的過程中又重新學習了一下書中的內容,俗話說的溫故而知新確實很對。特別是象軟體開發這種技術一定要在實踐中才能真正掌握的。網上有一份《地形制作全攻略》的文件將的很不錯,在這一階段幫了我不少。

<!--[if !supportLists]-->3,  <!--[endif]-->這樣我瞭解了一些3D圖形引擎的概念、演算法的含義、處理的流程。於是下一步打算使用目前通用的3D圖形庫實現我的第一個3D圖形引擎。目前來說比較流行的是D3D和OpenGL,由於主要的目標是想做一個下位機的3D地圖引擎,所以把重點放在了OpenGL上。當然D3D我也嘗試了一下。第一步便是在D3D上把我之前做的軟體引擎進行了移植。效果還算不錯。

<!--[if !supportLists]-->4,  <!--[endif]-->這個是重點。針對OpenGL圖形庫的3D地圖引擎實現,目前還在學習中,已經把軟體3D引擎移植到了OpenGL的平臺上,這裡有本書對我幫助很大,《OpenGL三維圖形設計》,這本書完全從實際觸發,原始碼解釋都很詳盡,好書啊。下一步是呼叫OpenGL本身的庫函式進行相關實現,敬請期待吧。

。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。

OpenGL的函式庫應用操作(有一本書《OpenGL程式設計指南》,對於想深入學習OpenGL的童鞋來說很不錯):

1,呼叫gluPerspective和gluLookAt函式實現投影座標變換。

2,使用z-Buffer方式實現三維圖形的面消隱。

3,採用Gouraud方法實現渲染繪圖,但光照處理在沒有紋理的條件下效果不好

4,實現了紋理貼圖的方法,這下可以使用光照模型對紋理貼圖進行渲染了。

5,光照對紋理貼圖的渲染效果並不理想,加上之後會有不平滑的現象產生(就是能很明顯的看到渲染出的一塊一塊的三角形)。

    一開始以為是計算了每個三角形的頂點法線向量造成的不相容,改成只計算每個三角形的面法線向量,但是結果依舊。

    不清楚是什麼原因,先放一下吧,有哪位看客瞭解的,交流一下。

6,簡單的地形跟蹤演算法實現。原來小小的地形跟蹤也有很大的學問,深入下去估計能夠寫一篇論文。

2011-02-11:

經過以上的初步實踐,再重新回過來看書。《OpenGL 2.0 精髓》這本書正在消化。

看來目前的水平差的還很遠那!

關於glTexEnvi函式中的一些引數解釋:

GL_REPLACE:將Texture color完全替換當前幀中的顏色

GL_MODULATE:預設方式。將當前幀中的顏色替換成Texture Color和incoming primary color的混合。該選項能與光照模型相連,能保留下環境光(Ambient)和散射光(diffuse)的光照效果。但對鏡反射(specular)影響較大,所以需要用其他方式解決。

GL_ADD:在當前幀的顏色中新增Texture Color的效果。該選項可以處理鏡反射(只在Opengl 1.3或以上版本中才有)。