開始3D編程前需注意的十件事

2013-07-08 10:07:35來源:開源中國作者:

開始3D編程不是一件容易完成的任務。這里有很多新的東西可以發(fā)揮作用,從選擇語言到選擇合適的3d建模軟件。當這10個事情完成時,無論你選擇何種語言,使用何種建模軟件,你都可以認為自己是這方面的半個專家了。

開始3D編程不是一件容易完成的任務。這里有很多新的東西可以發(fā)揮作用,從選擇語言到選擇合適的3d建模軟件。當這10個事情完成時,無論你選擇何種語言,使用何種建模軟件,你都可以認為自己是這方面的半個專家了。

1:建立自己的圖形初始化函數(shù)

現(xiàn)在有種類繁多的3d引擎和平臺,所以這個任務一般交給它們來完成。我還記得以前的事情,你必須使用windows函數(shù)來初始化OpenGL,并管理窗口句柄和資源的加載。了解事情是如何進行內部管理的會讓你更深刻理解你現(xiàn)在在干什么,這是非常有用的。 我建議從NEHE的教程開始。在教程的第一章中包含了一個C語言編寫的利用Windows API的圖形初始化函數(shù)。如果這里有很多東西需要你控制,你可以試試C++的相對的函數(shù),或者使用托管語言,像C#、Java或者Python。在網(wǎng)絡中有很多例子。

2:實現(xiàn)自己的相機

您可以從互聯(lián)網(wǎng)上復制和粘貼攝像頭的代碼,使用它并沒有大的問題, 但它不是自己的相機,直到你從頭開始,充分了解一些概念,如向量處理,矩陣變化,角度轉換等等。你應該先從一個FPS(第一人稱射擊)的攝像頭開始,它會給你需要的一切并讓你為接下來的學習做好準備。 如果你以后想構建自己的游戲,你不能使用它。我建議你閱讀這篇文章,以找出最適合您的需求類型的相機。

3:了解初級的3D概念

當我開始,我就開始聽到了很多新詞,如抗鋸齒,各向異性過濾,阻塞測試,Z-緩沖,alpha測試,著色器語言,凹凸貼圖等。如果你是一個玩家,也許你已經(jīng)在配置游戲的圖形設置時看過它們了。請確保你花費一些時間來閱讀相關內容,因為這將會給你一個3D編程的概述。

4:學習所有向量和矩陣的知識

這始終被低估。我強烈建議,為了正確地管理如相機,光線追蹤,地形跟蹤的東西,你應該知道關于這個的一切。當然,你也需要學會最基礎的三角知識,F(xiàn)在我才明白,如果我愿意花幾分鐘研究這個問題,我的生活本應該很輕松。

5:編寫你自己的3D模型加載器

我建議從使用OBJ文件或STL文件開始,因為他們用一個ASCII格式表示。之后你可以遷移到其他根偉復雜的格式上,比如3DS格式。有了這個,你不僅將了解如何保存3D模型,你還會理解如何繪制三角形,然后你就會明白圖形引擎是如何繪制一切的。

6:成功實現(xiàn)自己的碰撞算法

一個事情是繪制世界,另外一個是管理其他中幾何形狀。在一個虛擬的3D世界中,這里沒有物理定律,所以你必須創(chuàng)建它們。如果你想要一個對象不能穿越墻壁,那么你必須在墻壁中創(chuàng)建一個幾何圖形并計算所有東西。有幾種方法來管理碰撞,我建議從在一個迷宮項目實現(xiàn)兩體碰撞開始。試試這個鏈接,了解更多信息。

7:實現(xiàn)一個小的粒子引擎

當我發(fā)現(xiàn)3D游戲中火焰、煙霧、照明和一些其他令人驚艷的效果是由粒子組成,而那些粒子是由相機面前的貼圖組成。你添加更多的粒子,效果看起來更加逼真,但是性能就有所損失了。我的第一個粒子引擎是為火箭的煙霧制作的,而且我這樣做的時候還沒有不參看粒子引擎教程。后來我意識到了,我已經(jīng)改造了車輪。通過實現(xiàn)這些東西,你會明白一些諸如粒子發(fā)射器、粒子行為等想法。

8:了解一個3D建模軟件的基本知識

為了修改在你的應用中使用的3D模型,你應該知道基本的操作,比如平移,縮放,旋轉,變形,導出為其他格式,并制作簡單的模型。如果你不這樣做,你在制作第一個游戲時遇到事事依賴別人的情況。我曾用過幾個建模軟件,我強烈推薦3D MAX或Maya。

9 :加載和播放動畫

我做過的最困難的事情是加載并正確播放動畫。我不得不對3D max的XAF文件進行大量的逆向。我不得不學習骨骼層次,矩陣插值等東西。在最后,看到自己的模型自行移動是一件讓人相當高興的事情。我建議從一個機器人動畫開始,因為動物模型什么的還需要一種名為蒙皮的技術。

10 編寫2D自定義GUI控件

當我開始使用XNA時,由于XNA沒有實現(xiàn)窗體控件,我不得不構建自己的圖形用戶接口。這也導致了兩件事:

第一:我有了構建自定義的GUI控件的能力。

第二:我懂得了一些重要的概念,如事件控制和事件捕捉。

這不是容易的事,我實現(xiàn)的最難的一個控件是listbox,但是一旦做出來了,就可以在很多地方使用了。

結論

在這個過程中你將會遇到很多問題。你不得不花費很多時間來使你的代碼可以正常工作,即使你很聰明。但是我可以告訴你的是,從一個程序猿的角度來說,沒有什么快樂比的上你看著你的代碼能順利的工作。我仍然不能忘記當我第一次編出OBJ模塊加載器時的喜悅。當時,我想要加載個人臉圖像,然后數(shù)個小時過去了,在凌晨3:50時,突然一個非常詭異的人臉出現(xiàn)在我的屏幕,真是嚇死爹了,每當我想起這件事時,就哈哈大笑……

我確信當你設法完成這10件事后,你可以說你已經(jīng)了解了3D編程的基礎。我寫篇文章是因為我花了很多時間來完成它(指走了彎路了),所以我希望每個開始接觸3D編程的人,能有一個小小的指南。我的建議是開始做一個小小的游戲,并不斷的完善它。我覺得這是一個很好的方式,因為如果只是單純的去學習而看不到實際的效果的話,積極性不高。一段時間之后,你會覺得游戲對你來說不一樣了,因為你會花很多時間來想它們是怎么解決你曾經(jīng)碰到的技術難點的。以上,我試圖使這篇文章結構保持清晰和易懂,如果你喜歡,你可以訪問我的 博客來獲取更多的這方面的內容。

英文原文:Ten Things to Achieve When Starting 3D Programming

 

關鍵詞:3D編程

贊助商鏈接: