【发布时间】:2013-02-08 05:50:12
【问题描述】:
在默认的网格顶点构造中,我们这样做。
//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 有一些用处。
-
你的问题没有意义。位置是顶点的部分;它是顶点的一个组成部分。那么如果不改变位置或颜色,v0 的哪一部分与 v1 不同。简而言之,这里的“顶点”是什么意思?
-
我的意思是:一个三角形有 3 个点来定义它们的模型。我可以发送 3 个位置或 3 个颜色或其他。但通常这 3 个位置对于三角形的 3 个点是相同的。我想知道是否有办法减少这种位置(或颜色等)的减少。当发送例如。一千个三角形我发送了 3 千个点和相同大小的位置、颜色等。如果每个三角形使用一个位置,则将其减少 2/3。由于我可能会使用数百万个三角形,因此切割 200 万个浮点数似乎是个好主意;p