2015-05-29 115 views
0

我正在做一個2D遊戲,我一直在尋找通過關於噸這使得線程的 - 這似乎是一個熱門話題。然而,我遇到的問題是,建議每次都有所不同,這可能部分是由於問題跨越了幾年的範圍。渲染2D圖像的最佳實踐

根據所有主題的要點,我收集到我將使用VBO呈現每個單獨的對象,可能會翻譯並轉換它以適應當時繪製的任何精靈的需求。我應該如何繪製不同的精靈?我應該使用spritesheet並指定像素偏移嗎?也許紋理地圖集?還是應該爲每種不同類型的對象使用一個VBO?

更新回答艾克的問題: 我打算只用預先繪製的精靈有固定的動畫。理想情況下,我希望遊戲能夠在儘可能多的系統上以可通過的幀速率播放。這將是一個拼圖遊戲。我並不太在意誇張的圖形效果。我可能會對「拋光」階段增加額外的效果感興趣,但我完全可以堅持使用純精靈。

+0

答案是一個響亮的「它取決於」。最佳實踐是一個相當滑稽和有見地的事情。與VBO相關的成本可能會更好地避免,如果您處理相對較低的vert。計數。我可能會自己去一個不同的方向。但我不能說我會使用哪種替代方案。 – Aumnayan

+0

需要更多的細節!例如,你是否想要用骨骼來連接角色,在那裏你可以以編程方式移動他們的胳膊和腿,例如, (可能用IK),或者只是一個帶有固定動畫的預繪製的精靈?你瞄準的是舊硬件(鑑於它是2D遊戲),還是想全力以赴並瞄準更強大的機器?它是什麼樣的遊戲?你想要什麼樣的圖形效果? –

回答

1

如果你主要想要多邊形的數量(即四邊形或簡單的補丁)簡單的二維,不要打擾VBOs,在這種情況下,他們不會得到任何性能(太小,並經常更新)和「動態」VBO支持仍然是一些機器人的bug(在許多其他平臺上並不重要)。

如果你想要良好的性能,你需要做一些繪製調用(即每四不是一個)。要做到這一點,請使用紋理地圖和四邊形排列的三角形條。您可以將帶中的每個四邊形與一個平面三角形鏈接起來(它將不可見並且非常便宜)。當你改變紋理或混合模式時,你只需要做一個新的繪製調用(或者如果你想使用不同的着色器,但在2D遊戲中很少見)。

所以基本上,如果你想畫一個四邊形,你檢查紋理/混合模式是一樣的前一個,如果是,你把你的三角形的三角形帶。如果不是,則繪製當前的三角形條並開始新的三角形條。

您可能需要在開發過程中多次更改紋理地圖集(添加新的東西,移動現有的東西以騰出空間),以便爲此做好準備(簡化/不需要更改代碼)。

編輯:下面是一個具體的例子(image source): Pix the Cat sprites

此紋理地圖包含在遊戲Pix的貓的多人模式中使用的所有圖像。

比方說遊戲需要繪製兩個雞蛋和爆炸。這將只畫出1三角形帶:

triangle strip example

遊戲首先構建2個三角形的第一個蛋,接着用2個平面三角形(在此顯示爲紅色線),然後2個三角形的第二蛋, 2個平面三角形,然後是2個三角形用於爆炸。然後所有這些都是一次繪製的:一個三角形條形圖的調用。這是可能的,因爲蛋和爆炸都在相同的紋理上。

在遊戲中吸引數百四邊形每幀的結束,但有隻繪製調用了一把。

+0

如果我不應該使用維也納國際組織,有什麼選擇?大多數消息來源似乎都建議使用VBOs(我認爲這是因爲他們的3D意圖)。 –

+0

glVertexAttribPointerça在當前綁定的VBO中取一個偏移量,或者如果沒有綁定VBO,則直接指向頂點數據。後者的用法是你需要的。 – Jerem

+0

好吧,如果我在這裏理解正確,那麼想法是連接相同的「瓷磚」,然後將背景標記爲平鋪紋理。任何剩餘的棋子,如玩家角色和敵人,都將分開繪製。 –