【发布时间】:2026-02-09 23:15:02
【问题描述】:
我正在尝试在 OpenGL ES 2.0 中为 android 游戏制作 2d 地图(对于游戏,想想平铺的世界地图)。基本上,有几种瓷砖类型具有不同的纹理,并且地图是从这些类型中随机生成的,因此从游戏到游戏地图会发生变化,但在单个游戏的持续时间内它保持不变。
我的第一个想法是预先生成一个大纹理/图像/位图(独立于 OpenGL),基本上将重复的平铺纹理拼接在一起以制作更大的地图,然后将这个单一纹理用于一个大地图矩形。从理论上讲,我认为这很简单并且可以正常工作,但我担心它不能很好地适用于较大的地图,尤其是在移动设备上,我会用如此大的图像地图耗尽内存。另外,有一小部分瓷砖会反复复制,因此在大纹理中反复复制像素数据似乎是一种巨大的浪费。
我的第二个想法是有很多纹理,每个瓷砖纹理都有一个。但是我不确定这将如何工作,纹理绑定,我是否需要着色器包含多个纹理引用,并且在着色器中有使用正确的逻辑?
最后,我认为使用纹理图集可以工作,拥有一个包含所有平铺数据的纹理/图像,这将相对较小。但是我很难想象如何进行数学运算,以使地图矩形的“图块”或子部分使用完全不同的纹理坐标。
我是不是以错误的方式处理这个问题?我应该为每个瓷砖使用一个矩形吗?至少通过这种方式,我可以独立地为每个图块传递着色器的顶点坐标和纹理坐标。这似乎更容易,但也似乎是错误的,因为地图实际上只是一个不会改变的矩形。
【问题讨论】: