【发布时间】:2014-07-03 12:19:47
【问题描述】:
我正在尝试在 OpenGL(至少 3.3 版)中绘制由图块制成的地图。我目前这样做的方式是将地图上每个图块的所有顶点数据编译到一个数组中,并将该数据绑定到顶点数组内的缓冲区。法线和纹理坐标也是如此;每个都有自己的缓冲区。然后有一个指向该数据的顶点属性指针,以便顶点着色器获取它。
话虽如此,当每个瓦片都有自己的颜色时,这是一种单一的纯色(不是纹理或渐变),我实际上是将一个与顶点数组大小相同的数组传递给着色器,即使瓷砖的所有 6 个顶点的颜色都是恒定的!这似乎非常浪费,因为它本质上是相同的数据 x6。有没有办法在渲染地图时每 6 个顶点有效地重用相同的数据?
我会为每个图块使用统一或属性,但请记住所有图块都放置在单个顶点数组中,因此我无法分别为每个图块重新绑定它们。
当前的方法确实有效,而且速度非常快(GT 750m 上 256x256 瓦片为 2000 fps),但我不禁为简单地复制整个数组中的数据以匹配每个顶点而感到内疚,即使每个图元的数据是恒定的(实际上是 2 个图元:组成方形图块的两个三角形)。他们肯定有更好的方法吗?
【问题讨论】:
标签: opengl attributes glsl shader