2012-09-19 45 views
1

我打算在Javascript中编写一个简单的2D平台变形器,其中每个框架将绘制不同的(纹理)瓷砖。这里是我的问题:Opengl ES纹理渲染概念

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

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

回答

0

我建议您最大的纹理是1024 x 1024的最大兼容性。 1024对于XBOX 360和PS3来说已经足够了,应该对你来说已经足够了:)。

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

+0

感谢您的反馈意见。 OK从2个答案,它是有意义的只是加载一个巨大的纹理和索引与顶点纹理坐标。 – cobus

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来查询实现限制。

+0

非常感谢您的反馈。我想我会选择精灵表的想法,有意义避免太多的“绑定”调用。 – cobus