在OpenGL中实现多个纹理的最佳方法是什么?我已经在网上做过一些研究,有些方法可以创建一个具有大量所需纹理的纹理图集。另一种方法是使用数组纹理。然而,它们似乎都不是最好的方法,因为第一种方法需要一个非常非常大的图片,而第二种方法需要另一个属性(我想?)指向要使用的纹理。像COD或战地等大型游戏使用什么来为GPU加载大量纹理?
答案 0 :(得分:2)
像COD或战地等大型游戏使用什么来为GPU加载大量纹理?
他们将它们加载到单个纹理对象中并根据需要进行切换。 GPU具有多个纹理单元,每个纹理单元都可以绑定纹理。然后从着色器中可以根据需要访问这些纹理。
请参阅我的minimal_glsl示例,了解如何使用两种纹理完成。
答案 1 :(得分:2)
使用数组纹理和/或纹理图集的原因主要是性能。这种性能是通过一种方式实现的:减少所需的绘制调用次数。
因此,如果您经常需要在对象 (着色器中的矩阵等)之间更改状态,则没有多大意义。当然,不必更改纹理是一件好事,但不会像使用较少的绘制调用那样大。“
纹理地图集通常用于字体字形图像,2D游戏资产,GUI资源等,原因如下:您只是绘制了一堆四边形。您不希望在每个四边形之间更改纹理,因此您可以在单个(或极少数)绘制调用中绘制所有文本,2D精灵,GUI元素等。当然不是每个四方的一次平局调用。
数组纹理更适用于绘制同一网格的多个副本,但具有不同的纹理。等等。