Java LWJGL/OpenGL的理想spritesheet数

Java LWJGL/OpenGL的理想spritesheet数,java,opengl,lwjgl,sprite-sheet,Java,Opengl,Lwjgl,Sprite Sheet,我正在用LWJGL做一个游戏,到目前为止,我决定用5到6张精灵床单。它就像一个用于块,一个用于项目、对象等。通过这样做,我有了与精灵密切相关的精灵表,通常具有相同的大小(在块和项目的情况下)。但这是更好的方式吗?还是我应该把所有的东西都放在一张雪碧纸上,没有任何组织 如果我用正确的方法做,还有另一个问题。例如,当您在地图中时,我需要绘制块。但是在这些块上,可以有电线和其他东西——它们在一个单独的精灵板中。但是,这些信息存储在同一个数组中。所以通常我只在上面迭代一次,每次,画块,然后在上面布线——

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

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

没有“理想”;这些因素对你的需求很重要

请记住为什么要使用精灵图纸:因为在处理2D渲染时,切换纹理对于每个对象来说太昂贵了。因此,只要你不为渲染的每个精灵切换纹理,你就已经在游戏性能方面领先了

您需要考虑的其他因素包括:

  • 最低用户硬件规格。具体来说,您希望代码使用的
    GL\u MAX\u TEXTURE\u size
    的最小大小是多少?您的精灵表越大,您的硬件需求就越大,因为单个精灵表必须是纹理

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

    GL 2.1的最低要求为64,但任何实际的2.1硬件都将在512到2048之间提供。因此,选择你的雪碧表大小基于此

  • 您正在渲染的内容。您希望能够从一个精灵工作表中渲染尽可能多的内容。要避免的是频繁的纹理切换。如果您的世界被划分为多个层,如果您可以将每一层的精灵安装到它们自己的工作表上,那么您做得很好。没有硬件会因为20次纹理变化而窒息;问题出在数万人身上

    主要的事情是一次渲染所有使用图纸的内容。不一定在同一个呈现调用中;可以切换网格和着色器一致性/固定功能状态。但在渲染完图纸所需的所有内容之前,不应在这些渲染之间切换图纸


谢谢您的回答。我将继续使用一些精灵图纸,然后只是改变地图的渲染,以便首先绘制所有块,然后绘制导线。