在默認的網格頂點構造中,我們執行此操作。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)有一些用處。 –