在默认的网格顶点构造中,我们执行此操作。OpenGL顶点属性重用
//v = vertex, p = position, c = color
buffer = { v0 , p0, c0,
v1 , p0, c0,
v2 , p0, c0 };
而且我们有一个三角形。 但我想重用明显的特征是这样的:
//p and c are the same for all vertexes
buffer = { v0, p0, c0 ,
v1,
v2 };
我们可以在着色均匀值做到这一点,但我会渲染数以千计的同一缓冲区不同位置的三角形:
buffer = { v0, p0, c0 ,
v1,
v2,
v3, p1, c1,
v4,
v5,
v6, p2, c2,
...};
我现在的解决方案是:
1)发送属性的副本像第一个例子中的每个顶点(鸵鸟政策想,但也许是最好的解决方案)。
2)发送用于位置/颜色(统一大小限制问题的索引属性(搜索)和均匀阵列?)
3)最佳解决方案?
这样做(很小)的内存利益的性能损失通常是不值得的,没有干净的方式做到这一点。在加载大多数模型的情况下,您将拥有大多数独特的纹理坐标和法线。 –
对我来说,这看起来像是虚假的经济。在担心一些“冗余”数据之前,我更担心GPU的效率。与纹理内存要求相比,这没什么。 –
除了(或者尽管有!)我之前说过的,你可能会发现[provoking vertex](http://www.opengl.org/wiki/Primitive#Provoking_vertex)有一些用处。 –