游戏编程中的精灵,多个文件与一个"纹理"?

ran*_*its 3 sprite

请原谅我,如果我的术语不正确,因为我是游戏编程的新手.我一直在研究一些开源项目,并注意到一些精灵被分成几个文件,所有文件都被组合在一起,使得一个2d对象看起来像是动画.那是直截了当的.然后我将看到一种不同的方法,将2d对象全部放在一个png文件或类似的东西中,彼此相邻.

使用一种方法对另一种方法有优势吗?精灵应该在单独的文件中吗?为什么他们有时都在一张纸上?

Cra*_*rks 15

前一种方法通常更简单,易于编程,因此您可以在开源项目中看到很多方法.

第二种方法在现代图形硬件上更有效,因为它允许您通过指定不同的u,v坐标从一个大纹理中绘制多个不同的精灵,以从复合纸张中选择每个单独的精灵.由于u,v坐标可以与顶点数据一起流式传输到着色器,因此,如果必须为每个多边形切换纹理(这意味着更改着色器状态),则可以更有效地绘制一组大的精灵.这意味着你可以每毫秒绘制更多的精灵,从而获得更多的精灵.


Bli*_*ndy 5

每次切换当前绑定的纹理时,都会受到惩罚(如果系统内存耗尽并开始分页纹理,则会产生很大的损失).所以用一个纹理绘制的东西越多越好.走向极端,如果你从未切换纹理绑定,你将受到0惩罚.

另一方面,视频卡限制了纹理的最大尺寸,因此您只能将较小的纹理分组为大纹理.卡越旧,您可以使用的纹理尺寸越小.因此,如果您想让您的游戏适用于各种各样的卡片,您必须将纹理限制为更正常的尺寸(或者为不同的卡片设置不同的纹理组合).

另一个问题是,有时虚拟世界中的东西本身并不属于这样的分组.虽然你的UI(窗框,按钮等)的每一个小装饰都可以有一个很大的纹理,但是对于不同的敌人你会有更难的时间使用单个纹理,因为它们甚至可能不会出现在屏幕上同时,或者您可能无法一个接一个地绘制它们,因为透明度需要从后到前的绘图方案.