2015-09-06 71 views
0

我在一個遊戲項目中工作,該項目具有大量資產。角色動畫非常詳細,需要很多幀才能發生。使用OpenGL和SDL逐幀動畫

起初,我創建了包含特定角色所有動畫的大型spritesheet。它在我的個人電腦上運行良好,但是當我在Android平板電腦上測試它時,我注意到它的GPU的最大紋理尺寸增加了。我的解決方案是將大的spritesheet分解成單獨的幀(最壞的情況是180幀)並將它們分別上傳到GPU。現在似乎在任何需要它工作的地方都可以工作。

現在,我一直在與最大的動畫是180幀寬度和高度的407x725像素的字符。然而,由於我無法在網上找到關於如何使用OpenGL正確渲染2D動畫的方向,我想問一下這種方法是否存在問題。是否有最大數量的紋理可以上傳到GPU?我能超越GPU的RAM嗎?

回答

3

用於GPU的最有效的方法是通過在整個精靈表到OpenGL作爲一個單一的紋理,並選擇通過調整紋理座標時繪製所需的幀。你也應該將這些精靈包裝進去,理想的情況下是方形紋理。降低GPU使用的內存總量對於性能尤其有利。在手機和平​​板電腦上。

你想避免如果可能的話經常改變哪個紋理被綁定。理想情況下,您希望綁定單個紋理,然後將其中的部分圖像渲染到屏幕上,直到您不再需要它爲止,然後綁定不同的紋理並繼續。

這樣做的原因是,GPU將努力優化它創建來處理你給它的幾何形狀的管道,和您選擇的着色器的操作。但是當你對配置進行大的改變,比如改變紋理的綁定或者着色器的綁定時,對於優化來說這肯定會有些不透明。一次給它更多的頂點和紋理座標比較好,因爲它們基本上都可以在不卸載和重新加載資源的情況下批量完成。

但是,根據您要定位的卡片,您應該記住,可能存在最大8192 x 8192大小的紋理或類似的東西。因此,根據您擁有的資產,您可能會被迫將其分成幾個紋理。