【问题标题】:Opengl ES texture rendering conceptOpengl ES 纹理渲染概念
【发布时间】:2012-09-21 02:30:33
【问题描述】:

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

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

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

【问题讨论】:

    标签: opengl-es 2d textures


    【解决方案1】:

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

    你有两个选择:

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

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

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

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

    【讨论】:

    • 谢谢您的反馈。我想我会选择精灵表的想法,避免过多的“绑定”调用是有意义的。
    【解决方案2】:

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

    另外,我建议您一次渲染整个关卡并只使用一种纹理。我看不出这有什么问题。无论这一种纹理是否有水、岩石和鸟类,它都应该可以工作。

    【讨论】:

    • 感谢您的反馈。从2个答案中可以确定,只需加载一个巨大的纹理并使用顶点纹理坐标对其进行索引。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-16
    • 1970-01-01
    • 1970-01-01
    • 2019-06-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多