我对OpenGL很新,所以如果这可能非常基本(或没有意义),我很抱歉。
我正在开发一款2D游戏,其中有很多精灵,其大小不是两个。所以我会有像520x260这样的纹理,并且无法重新设计。现在我的理解是,由于OpenGL ES 1需要纹理为2的幂,我实际上会浪费大量内存(因为我之前的例子中的纹理实际上占用了硬件上的1024x512)。
我一直在想的是,不是让精灵是两个三角形,而是一个大的纹理,我可能让精灵由更小的三角形组成,并且我可以在较小的三角形中分解为大的纹理pow2块(比如128x128)可以在这些三角形上单独使用(使用类似网格图的东西)。
所以我的问题是:对单个网格使用多个纹理是否可行且可行?如果是这样,那么额外的计算(所有较小的三角形和纹理化所必需的)是否值得纹理存储器保存?
P.S。我正在使用Android,但我认为这并没有太大区别。
答案 0 :(得分:1)
绝对可以而且应该这样做以节省内存。您唯一需要担心的是UV映射。您必须根据排列网格的方式调整UV坐标。
例如,假设你想在128x128网格中填充三个纹理:
+-----------------+
|1. |
| 128x64 |
| |
+-----------------+
|2. |3. |
| 64x64 | 64x64 |
| | |
+--------+--------+
如果要映射每个纹理,则UV坐标范围如下:
您必须将这些相应地转换为您的顶点。
答案 1 :(得分:1)
我很确定纹理不必与精灵相同。如果你有精灵520x260,你应该能够将纹理缩小到512x256并将其映射到你的精灵上,而不会注意到稍微小一点的分辨率。