【问题标题】:Ideal number of spritesheets for LWJGL/OpenGLLWJGL/OpenGL 的理想精灵表数量
【发布时间】:2013-01-17 09:30:42
【问题描述】:

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

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

【问题讨论】:

    标签: java opengl lwjgl sprite-sheet


    【解决方案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 次纹理更改而窒息;问题是成千上万。

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

    【讨论】:

    • 感谢您的回答。然后我将继续使用一些精灵表,并更改地图的渲染,以便首先绘制所有块,然后绘制电线。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-04-06
    • 2013-04-07
    • 1970-01-01
    • 1970-01-01
    • 2012-07-31
    • 2011-09-21
    • 1970-01-01
    相关资源
    最近更新 更多