我试图在OpenGL(最低版本3.3)中绘制由瓦片制成的地图。他们目前正在做的这种方式是将地图上每个图块的所有顶点数据编译成单个数组,然后将数据绑定到顶点数组中的缓冲区。法线和纹理坐标也是这种情况;每个都有自己的缓冲区。然后有一个指向该数据的顶点属性指针,以便顶点着色器获得该数据。这就是说,当谈到每个瓷砖有自己的颜色,这是一个单一的纯色(而不是纹理或渐变),我本质上是传递一个大小与顶点数组大小相同的数组到一个数组中着色器,即使瓦片的所有6个顶点的颜色都是恒定的!这看起来非常浪费,因为它基本上是相同的数据x6。在渲染地图时,是否有办法有效地每6个顶点重复使用相同的数据?在OpenGL缓冲区中避免重复的数据
我会为每个瓷砖使用统一或属性,但请记住所有瓷砖都放置在单个顶点数组中,因此我无法单独为每个瓷砖重新绑定这些瓷砖。
目前的方法确实有效,它的速度非常快(GT 750m上的256x256瓦片的速度为2000 fps),但我不禁感到内疚,因为它只是复制整个阵列中的数据,因此它与每个顶点匹配,甚至尽管每个图元的数据是不变的(实际上2个图元:构成方形图块的两个三角形)。当然,他们必须是更好的方式?