iPhone 游戲開發教程 游戲引擎 (2)
iPhone 游戲開發教程 游戲引擎 (2)是本文要介紹的內容,繼續上一章的內容繼續了解,想要深入了解的話,請關注末尾。本節主要介紹了游戲開發過程中用的一些元素,先來看內容。
圖像引擎
圖像引擎負責視覺輸出,包括用戶借以交互的圖形用戶界面(GUI)對象,2D精靈動畫或3D模型動畫,并渲染的背景與特效。
雖然渲染2D與3D圖片的技術不盡相同,但他們都完成相同的一組圖形任務,包括紋理和動畫,它們的復雜度是遞增的。
紋理
對于顯示圖片,紋理是中心。2D時,一個平面圖片是以像素為單位顯示在屏幕上,而在3D時,一組三角行(或者被稱為網格)在數學魔法作用下產生平面圖片并顯示在屏幕上。這以后,一切都變得復雜。
像素、紋理與圖片
當進行屏幕描繪時,基本單位是像素。每個像素都可以被分解為紅、綠、藍色值和我們馬上要討論的Alpha值。
紋理是一組關于渲染一組像素的數據。它包含每個像素的顏色數據。
圖片是一個更高層的概念,它并非與一組特殊的像素與紋理相關聯。當一個人看到一組像素,他的大腦會將它們組合成一幅圖片,例如,如果像素以正確的順序表示,他可能會看到一幅長頸鹿的畫像。
保持以上這些概念獨立是非常必要的。紋理可能包含構成長頸鹿圖片的像素:它可能包含足夠的像素來構成一只長頸鹿的多幅圖片,或者僅包含構成一幅長頸鹿圖片的像素。紋理本身只是一組像素的集合,它并不固有的知道它包含的是一幅圖片。
透明度
在任一刻,你的游戲會有幾個或者多個物體渲染在屏幕上,其中一些會與另外一個重疊。問題是,如何知道哪個物體的哪個像素應該被渲染出來呢?
如果在最上層的紋理(在其他紋理之后被描畫)是完全不透明的,它的像素將會被顯示。但是,對于游戲物體,可能是非矩形圖形和部分透明物體,結果會導致兩種紋理的結合。
2D圖片中最常用的混合方式是完全透明。假如我們想畫一幅考拉(圖2-3)在爬在桉樹頂上(圖2-4)的的圖片??祭膱D片以矩形紋理的方式存儲在內存中,但是我們不想畫出整個矩形,我們只想畫出考拉身體的像素。我們必須決定紋理中的每個像素是否應該顯示。
圖2-3 考拉紋理
圖2-4 桉樹紋理
有些圖片系統通過添加一層遮罩來達到目的。想象我們在內存中有一幅與考拉紋理大小一樣的另外一份紋理,它只包含白色和黑色的像素。遮罩中每個白色的像素代表考拉應該被描畫出來的一個像素,遮罩中的黑色像素則代表不應該被描畫的像素。如果當我們將考拉描畫到屏幕上時,有這樣的一個遮罩層,我們就可以檢查考拉對應的像素并僅將需要描畫的像素表示出來。如果每個像素有允許有一組范圍值而不是二進制黑/白值,那么它還可以支持部分透明(參見圖2-5)。
圖2-5 考拉遮罩紋理
紋理混合
為紋理而準備的存儲容量大到足以支持每個像素都有一個范圍值。典型的是,一個Alpha值占一個字節,即允許0-255之間的值。通過合并兩個像素可以表現出有趣的視覺效果。這種效果通常用于部分透明化,例如部分或完全看透物體(圖2-6)。
圖2-6 部分透明的綠色矩形
我們可以為每個像素來設定Alpha以決定它們如何被混合。如果一個像素允許的范圍值為0-25***lpha的范圍值也同樣應當為0-255。盡管紅色值為0表示當描畫時不應該使用紅色,但Alpha值為0則表示該像素根本不應該被描畫。同樣,128的紅色值表示描畫時應該使用***紅色值的一半,128的Alpha值表示當與另外一個像素混合時,應該使用該像素的一半顏色值。
當混合物體時,正確的排列物體順序是非常重要的。因為每個混合渲染動作都只會渲染源物體與目標物體,首先被描畫的物體不會與后描畫的物體發生混合。盡管這在2D圖片中很容易控制,但是在3D圖片中變得非常復雜。
旋轉
在2D圖片中,大部分的紋理都會被直接渲染到目標上而不需要旋轉。這是因為標準硬件不具備旋轉功能,所以旋轉必須在軟件中計算完成。這是一個很慢的過程,而且容易產商低質量的圖片。
通常,游戲開發人員會通過預先渲染好物體在各個方向的圖片,并當物體某個方向上時,為其在屏幕上描畫正確的圖片來避免以上問題的發生。
在3D圖片中,旋轉的計算方式與照明相同,是硬件渲染處理過程中的一部分。
剪貼
由于某些在后面章節解釋的原因,紋理的另外一個重要方面是剪貼。盡管我們目前的例子都是將源紋理直接描畫到目標紋理上,但是經常會出現的情況是,需要將部分源紋理描畫到目標紋理的有限的一部分上。
例如,如果你的源紋理是在一個文件中含有多幅圖片,裁剪允許你僅將希望描畫的部分渲染出來。
剪貼同樣允許你進行描畫限制到目標紋理的一小部分上。它可以幫你通過紋理映射以3D方式渲染物體,將紋理鋪蓋到三角形組成的任意形狀的網格上。例如,一個紋理可以表示衣服或動物的毛皮,而且當3D角色穿著它移動的死后可能產生褶皺。這時候的紋理通常被稱作皮膚。
小結:iPhone 游戲開發教程 游戲引擎 (2)的內容介紹完了,希望本文對你有所幫助!想要深入了解游戲引擎的更多內容,請參考以下幾篇文章: