我打算用 Javascript 编写一个简单的 2D 平台游戏,其中每个帧都将使用不同的(纹理)图块绘制。以下是我的问题:
如何渲染具有不同纹理的不同矩形/四边形?我的意思是我是否为岩石瓦片和草瓦片编写单独的片段着色器,并且是否将每种瓦片类型的顶点数据保存在单独的缓冲区中?我想把我所有的瓦片顶点数据放在一个缓冲区中,但是我如何指定这个瓦片是一个必须得到那个草纹理的草瓦片?
当我将它们绑定到纹理单元时,我的纹理可以有多大?
如何渲染具有不同纹理的不同矩形/四边形?
你有两个选择:
例如,为每种瓷砖(grassTex 和 rockTex)创建一个纹理。然后在绘制场景时,在绘制某种类型的所有图块之前绑定适当的纹理,例如
glBindTexture(..., grassTex);
drawAllGrasstiles();
glBindTexture(..., rockTex);
drawAllRocktiles();
使用所谓的“精灵表”,您可以在其中将网格中的所有不同纹理打包成更大的纹理。所以你可能有一个纹理,其中纹理的左半部分是草,纹理的右半部分是岩石。然后,您可以在同一批次中将所有草和岩石瓷砖一起绘制,并使用纹理坐标来区分绘制纹理的哪一部分。现在,所有瓷砖的纹理坐标不再是 0 到 1,而是草的纹理坐标为 0 到 0.5,岩石的坐标为 0.5 到 1.0。
当我将它们绑定到纹理单元时,我的纹理可以有多大?
这取决于实现。调用 glGetGL_MAX_TEXTURE_SIZE
查询实现限制。
我建议你最大的纹理是 1024 x 1024 以获得最大的兼容性。1024 对于 XBOX 360 和 PS3 来说绰绰有余,对你来说应该绰绰有余:)。
另外,我建议您一次性渲染整个关卡并只使用一种纹理。我看不出这有什么问题。无论这一种纹理是否完全有水、岩石和鸟类,它都应该起作用。