2

在默认的网格顶点构造中,我们这样做。

//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) 最佳解决方案?

4

2 回答 2

3
//p and c are the same for all vertexes

不,他们不是。在您的情况下,顶点是 v、p 和 c 的整体组合。改变其中一个,你得到一个完全不同的顶点。常见的误解,但这就是它的工作原理

于 2013-02-08T11:00:45.090 回答
2

假设您不在古老的硬件上,并且顶点内存并不是那么重要,只需复制数据并为每个顶点保留完整的属性集。肯定不会慢。

以这种方式“重用”数据通常会导致性能下降,因为 GPU 无法优化数据访问;它必须做你想做的复杂事情。

于 2013-02-08T11:04:19.513 回答