Android OpenGL ES 1.1每个网格有多个纹理

Android OpenGL ES 1.1每个网格有多个纹理,android,opengl-es,Android,Opengl Es,我对OpenGL非常陌生,所以如果这可能非常基本(或者没有意义),我很抱歉 我正在做一个2D游戏,里面有很多大小不是二的幂的精灵。所以我会有一些纹理,比如说,520x260,不能重新设计。现在我的理解是,由于OpenGL ES 1需要纹理为二的幂,因此我实际上会浪费大量内存(因为我前面示例中的纹理实际上会占用硬件上的1024x512) 我一直在想的是,我可以让精灵由更多更小的三角形组成,而不是由两个三角形和一个大的纹理组成,我可以将大的纹理分解成更小的pow2块(比如128x128),可以分别在

我对OpenGL非常陌生,所以如果这可能非常基本(或者没有意义),我很抱歉

我正在做一个2D游戏,里面有很多大小不是二的幂的精灵。所以我会有一些纹理,比如说,520x260,不能重新设计。现在我的理解是,由于OpenGL ES 1需要纹理为二的幂,因此我实际上会浪费大量内存(因为我前面示例中的纹理实际上会占用硬件上的1024x512)

我一直在想的是,我可以让精灵由更多更小的三角形组成,而不是由两个三角形和一个大的纹理组成,我可以将大的纹理分解成更小的pow2块(比如128x128),可以分别在这些三角形上使用(使用网格贴图之类的东西)

所以我的问题是:对单个网格使用多个纹理是否可行?如果是这样的话,额外的计算(对于所有较小的三角形和对它们进行纹理处理是必要的)是否值得节省纹理内存


另外,我正在使用Android,但我认为这并没有多大区别。

为了节省内存,你绝对可以也应该这样做。唯一需要担心的是UV贴图。您必须根据网格的排列方式调整UV坐标

例如,假设要在128x128网格中填充三个纹理:

+-----------------+
|1.               |
|     128x64      |
|                 |
+-----------------+
|2.      |3.      |
| 64x64  |  64x64 |
|        |        |
+--------+--------+
如果要映射每个纹理,则UV坐标范围如下所示:

  • 从(0.0,0.0)到(1.0,0.5)
  • 从(0.0,0.5)到(0.5,1.0)
  • 从(0.5,0.5)到(1.0,1.0)

  • 您必须将这些相应地转换到顶点上。

    我非常确定纹理不必与精灵的尺寸相同。如果您有520x260的精灵,您应该能够将纹理缩小到512x256,并将其映射到精灵上,而不会注意到分辨率稍小。

    好吧,这只是一个极端的例子-实际上,差异可能不会如此接近。因此,我希望避免拉伸纹理。好吧,为了回答你的问题,是的,在大多数情况下,为了减少图形管道上的负载,额外的计算是值得的。好吧,我在想,只使用统一的网格会更容易(因此纹理切片的大小都相同)。我已经有了一些网格地图的工作代码(改编自复制岛),但是它使用一个纹理来制作多个瓷砖-所以我需要使用多个纹理,以另一种方式工作。不过,我想实施起来应该不会太难。我主要关心的是这是否是一个好主意。好吧,根据你的回答,我继续实施了这个计划。这似乎确实有积极的影响!如果没有别的,我至少可以挑选出更多的雪碧(当它离开屏幕时),因为它现在被分解成更小的碎片。