Opengl ES纹理渲染概念

时间:2012-09-19 10:14:20

标签: opengl-es 2d textures

我打算在Javascript中编写一个简单的2D平台游戏,其中每个框架将使用不同的(纹理)图块绘制。以下是我的问题:

  • 如何使用不同的纹理渲染不同的矩形/四边形?我的意思是为岩石砖和草砖写一个单独的片段着色器,我是否将每种类型的瓷砖的顶点数据保存在一个单独的缓冲区中?我想将所有的瓷砖顶点数据放在一个缓冲区中,但是如何指定这个瓷砖是草砖,必须得到草纹?

  • 当我将它们绑定到纹理单元时,我的纹理有多大?

2 个答案:

答案 0 :(得分:1)

  

如何使用不同的纹理渲染不同的矩形/四边形?

你有两个选择:

  1. 例如,为每种图块(grassTex和rockTex)创建纹理。然后在绘制场景时,在绘制特定类型的所有图块之前绑定适当的纹理,例如

    glBindTexture(..., grassTex); 
    drawAllGrasstiles();
    glBindTexture(..., rockTex); 
    drawAllRocktiles();
    
  2. 使用所谓的“精灵表”,将网格中所有不同的纹理打包成更大的纹理。所以你可能有一个纹理,其中纹理的左半部分是草,纹理的右半部分是岩石。然后,您可以在同一批中一起绘制所有草和岩石拼贴,并使用纹理坐标来区分绘制纹理的哪个部分。现在,而不是所有纹理坐标从0到1的瓷砖,对于草,它们从0到0.5,对于岩石,它们从0.5到1.0。

  3.   

    当我将它们绑定到纹理单元时,我的纹理有多大?

    这取决于实现。使用GL_MAX_TEXTURE_SIZE调用glGet来查询实现限制。

答案 1 :(得分:0)

我建议你最大的纹理是1024 x 1024,以获得最大的兼容性。对于XBOX 360和PS3来说,1024绰绰有余,对你来说应该绰绰有余:)。

另外,我建议你在一次传递中渲染整个关卡,并且只使用一个纹理。我没有看到麻烦。无论这种纹理是否具有水,岩石和鸟类,它都应该起作用。