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