【发布时间】:2012-07-27 05:33:36
【问题描述】:
我正在创建一个基于图块的 2D 游戏,作为学习基本“现代”OpenGL 概念的一种方式。我正在使用带有 OpenGL 2.1 的着色器,并且熟悉渲染管道以及如何在屏幕上实际绘制几何图形。我想知道的是组织瓷砖地图以快速有效地渲染的最佳方式。我想到了几种可能的方法:
1.) 将表示单个图块(顶点和纹理坐标)的四边形存储在 VBO 中,并使用单独的 draw* 调用渲染每个图块,将其转换到屏幕上的正确位置并使用 uniform2i 给出位置在该特定图块的纹理图集中;
2.) 保留一个包含屏幕上每个图块(已计算的屏幕坐标和纹理图集坐标)的 VBO,使用 BufferSubData 每帧更新图块,但使用单个 draw* 调用;
3.) 保留包含静态 NxN“块”图块的 VBO,绘制许多图块块至少在屏幕上部分可见,并将它们各自转换到位置。
*如果可能,我希望远离最后一个选项,除非渲染 64x64 的块不是太低效。瓷砖以该大小的块加载到内存中,即使一次只能在屏幕上看到大约 20x40 的瓷砖,我也必须一次渲染多达四个块。这种方法还会使我的代码在其他几个方面变得复杂。
那么,其中哪一种是渲染图块屏幕的最有效方法?有没有更好的方法?
【问题讨论】:
标签: performance opengl graphics 2d