開始3D程式設計前需注意的十件事
開發者想要啟動3D程式設計也並非是件易事,它不僅需要許多新技術,而且還需要根據不同的專案來選擇程式語言從而設定正確的3D軟體模型。
3D程式語言提供了一種更加容易的編寫3D應用程式的方法,因為你使用的是一種專門為3D遊戲設計的指令碼語言來編寫DirectX介面。這種語言不受3D引擎速度和自由度的影響,並且避免了使用“真正”程式語言帶來的問題。
一起來看下文中提及的這10件事,有了這些嚮導,無論你是採用哪種語言或者是何種引擎,即使成不了專家但至少也會讓你告別“小白”。
#1:構建自定義圖形初始化功能
現今有關3D引擎和平臺種類繁多。記得以前,必須通過所有的Windows功能來初始化OpenGL並且你還要學會如何通過管理視窗控制代碼和資源載入。在開展新專案時瞭解專案是如何進行內部管理的,這一點非常重要。我的建議是檢視NEHE教程
#2:建立自己的攝像機功能
你可以從網際網路上覆制或者貼上攝像機程式碼,雖然使用起來並不會有什麼問題,但你完全可以建立一款屬於自己的相機,這就需要從頭開始瞭解向量處理、轉換矩陣、角度轉換等。
首先你應該從FPS (First Person Shooter) 相機編碼開始,如果你想要建立自己的一款遊戲,我建議你不要急著使用它,先了解下 Virtual camera system這篇文章,根據自己的需求找到最適合您的相機型別。
#3:瞭解初級3D概念
當我開始接觸3D概念時,我聽說許多新名詞比如anti-aliasing(抗鋸齒),anisotropic filtering(各向異性過濾,occlusion testing(遮罩測試),z-buffer(Z快取),alpha testing(alpha測試),shader language(著色器語言),bump mapping(凹凸紋理對映)等。如果你是一名遊戲玩家,當你為遊戲配置圖形設定時,這些名詞也許對你來說並不感到陌生。
#4:學習向量和矩陣
很多開發者常會忽略這一點,我強烈建議為了正確的管理相機,光線追蹤,地形追蹤(terrain following)等,你應該好好了解這方面資訊。此外,你還應該學習最小三角原理(minimum trigonometry basis)。
#5:為3D模型載入程式編碼
我建議先從.OBJ file或者.STL file開始,這是因為它們擁有同樣的ASCII格式表示法。等你熟悉掌握後再轉換到其複雜的格式比如:.3DS.。基於此,你不僅可以瞭解3D模型是如何儲存的,還能繪製出其原始模式:triangles(三角),緊接著你就會明白如何繪製出圖形引擎。
#6:使用碰撞演算法(collision algorithm)
繪製是一回事,而管理又是另外一回事。在虛擬的3D領域裡,沒有什麼物理定律,因此你需要建立它們。如果你想要建立一個物件而又不想穿過這堵牆,那麼你必須建立一個內部的幾何表示法,使用所有的運演算法,點選檢視更多資訊。
#7:執行迷你型的粒子引擎
當我發現火、煙霧、亮光以及其他一些令人驚豔的效果時我感到很失望。這些效果在粒子引擎打造的3D遊戲中常會見到,而這些粒子本質上附在相機的表層紋理上。你新增的粒子越多,呈現出的效果越逼真,但是效能則相對較弱。我的第一個粒子引擎是為了製作火箭煙霧,起初我並沒有看粒子引擎方面的教程。之後我才意識到,我已經徹底改造了輪子。但說實話我很樂意這樣做。
#8:學習最基本的3D軟體模型
為了在應用中使用更改的3D模型,你至少應該知道操作流程比如轉換,縮放、旋轉、變形,匯出其他格式並且製作簡單的模型。我曾做過一些軟體模型,這裡我強烈建議使用3D Max或Maya。
#9:載入和播放動畫
在3D中想要載入並正確播放動畫是比較困難的事情。我不得不給3D max .XAF檔案採用反向工程( reverse engineering)。我必須去學習新的東西比如bone hierarchy,matrix interpolation(矩陣插值)等等。看到自己的模型在移動,我想這是件非常可喜的事情。我建議從動畫機器人開始,這是因為該模型類似動物和人都需要另一種技術叫做Skinning。
#10:為2D自定義圖形使用者介面(GUI)編碼
當我開始XNA程式設計時,我被迫建立自己的GUI,這是因為XNA無法相容任何Windows控制元件。由此給我兩點啟示:一是,建立自己的自定義GUI控制元件;另一個則是理解概念,包括事件處理和事件追蹤(事件捕捉)。這並不簡單,最難的控制元件是我設定的列表框(listbox),但一旦當你完成建立後,你可以在任何地方使用。
圖片來源於網路
網友Bigcoder在部落格上發表了有關3D程式設計四個境界,筆者總結了以下幾點:
- 第一階段:初學者階段。這個階段主要是熟悉3D圖形學的基本原理和基本API的使用。
- 第二階段:進階階段。有人會選擇直接學引擎,開發遊戲;有人則會選擇先學場景管理和高階渲染。
- 第三階段:3D成熟階段。瞭解硬體的資源管理方式,結合自己的需求,解決資源的不當佔用和頻寬的隨意浪費的情況。深入熟悉硬體,徹底瞭解顯示卡流水線的特性,充分利用流水線的特性進行優化,這個階段是最煎熬的階段,也是最開心的階段。
- 第四階段:達人階段。尋求解決方案,這個階段技術已經不是唯一追求目的了,還有很多很多其他的方面他會關注。因為他的目的是讓整個社會承認他的價值,只有技術是不夠的。
看看你屬於哪個階段吧?
PS:也許3D模型我們並不陌生,但是3D程式設計對於筆者來說是個新詞,文中出現了許多專業的詞語,筆者也是抱著學習的態度進行翻譯的,倘若你在這篇文章中發現了錯誤,或者認為翻譯有誤的地方,歡迎告之我,希望這篇文章對你有所幫助。