0

我正在使用 LWJGL 制作游戏,到目前为止,我决定使用 5 或 6 个精灵表。它就像一个用于块,一个用于项目、对象等。通过这样做,我得到了具有密切相关的精灵的精灵表,并且通常具有相同的大小(在块和项目的情况下)。但这是更好的方法吗?或者我应该把所有的东西都放在一个单独的精灵表上,没有任何组织?

如果我以正确的方式做事,还有另一个问题。例如,当您在地图中时,我需要绘制块。但是在这些块上,可能有电线和其他东西——它们在一个单独的精灵表中。但是,此信息存储在同一个数组中。所以通常我只迭代一次,每次,绘制块,然后在它上面画线 - 每次迭代切换精灵表两次。但我认为切换这些可能需要一些时间,所以运行两次可能会更有趣,首先绘制所有块,然后再次迭代以绘制电线?为了改变纹理,我使用了 SlickUtil Texture 类,它有一个绑定方法——非常容易使用。

4

1 回答 1

1

没有“理想”;有一些因素对您的需求很重要。

请记住使用精灵表的原因:因为在处理 2D 渲染时切换纹理的成本太高而无法按对象进行。因此,只要您不为渲染的每个精灵切换纹理,您就已经在游戏性能方面领先。

您需要考虑的其他注意事项是:

  • 最低用户硬件规格。GL_MAX_TEXTURE_SIZE具体来说,您希望代码工作的最小大小是多少?精灵表越大,对硬件的要求就越高,因为单个精灵表必须是纹理。

    此值取决于硬件,但有一些一般要求。OpenGL 3.3 至少需要 1024;几乎每一块 GL 3.3 硬件都提供 4096。OpenGL 4.3 需要大量的 16384,这已接近浮点纹理坐标容量的理论极限(假设您需要至少 8 位的亚像素纹理坐标精度)。

    GL 2.1 的最低要求为 64,但人们将拥有的任何实际2.1 硬件将提供 512 到 2048 之间。因此,根据此选择您的 sprite sheet 大小。

  • 你在渲染什么。您希望能够从一张精灵表中尽可能多地进行渲染。您要避免的是频繁的纹理切换。如果您的世界被划分为多个层,如果您可以将每个层的精灵放在它们自己的工作表上,那么您做得很好。没有硬件会因 20 次纹理更改而窒息;这是数以万计的问题。

    最主要的是一次渲染所有使用工作表的所有内容。不一定在同一个渲染调用中;您可以切换网格和着色器制服/固定功能状态。但是,在您渲染完该工作表所需的所有内容之前,您不应在这些渲染之间切换工作表。

于 2013-02-02T01:25:48.833 回答