1

在 OpenGL 中实现多个纹理的最佳方式是什么?我在网上做了一些研究,一些方法是创建一个包含许多所需纹理的纹理图集。另一种方法是使用数组纹理。但是,它们似乎都不是最好的方法,因为第一种方法需要非常非常大的图片,而第二种方法需要另一个属性(我想?)来指向要使用的纹理。COD 或 Battlefield 等大型游戏使用什么将大量纹理加载到 GPU?

4

2 回答 2

2

COD 或 Battlefield 等大型游戏使用什么将大量纹理加载到 GPU?

他们将它们加载到单个纹理对象中并根据需要切换它们。GPU 有多个纹理单元,每个单元都可以绑定一个纹理。然后从着色器中,您可以根据需要访问这些纹理。

请参阅我的minimum_glsl示例,了解它是如何使用两个纹理完成的。

于 2012-08-21T14:50:07.710 回答
2

使用阵列纹理和/或纹理图集的原因主要是性能。这种性能是通过一种方式实现的:通过减少您需要的绘制调用的数量。

因此,如果您经常需要更改对象之间的状态着色器中的矩阵等),那么没有多大意义。当然,不必更改纹理是一件好事,但不如减少绘制调用来节省性能。

纹理图集通常用于字体字形图像、2D 游戏资产、GUI 资产等,原因是:您只是在绘制一堆四边形。您不想在每个四边形之间更改纹理,因此您在单个(或很少)绘制调用中绘制所有文本、2D 精灵、GUI 元素等。每个四边形肯定不是一个绘制调用。

阵列纹理更适合绘制相同网格的多个副本,但具有不同的纹理。等等。

于 2012-08-21T17:25:47.903 回答