instancing vs bufferGeometry vs interleavedBuffer



我需要画数千个点和线,女巫有位置,大小和颜色属性,它们的位置是动态的(在拖动中交互(。

到目前为止我一直在使用缓冲区几何,但现在我又发现了两件事

  1. 实例化
  2. 交错缓冲区

我想知道这些是什么以及它们是如何工作的?它们的优点和缺点是什么?它们更适合我的情况还是简单的缓冲区几何形状最适合我?

你能给我一个完整的比较一下这三者吗?

交错意味着不是创建多个 VBO 来包含数据,而是创建一个并混合数据。而不是有一个带有v1,v1,v1,v2,v2,v2...的缓冲区和另一个带有c1,c1,c1,c2,c2,c2....的缓冲区,你有一个带有不同指针的v1,v1,v1,c1,c1,c1,v2,v2,v2,c2,c2,c2...缓冲区。

我不确定这样做的好处是什么,我希望有更多经验的人可以更好地回答这个问题。我不确定如果你想混合类型会发生什么,比如纹理坐标的精度较低。不确定这是否是好的做法。

不利的一面是,如果您必须循环并更新位置,例如,而不是颜色,则该循环可能比只是排列时稍微复杂一些。

实例

是指在多个几何实例中使用一个属性。

一种类型是,比如说一个立方体,v1,v1,v1,v2,v2,v2....v24,24,24,24个顶点,描述一个在一个属性中具有锋利边缘的立方体。你可以有另一个有 24 个法线,另一个有不结果。如果你想把它放在某个地方,你可以使用制服,并在位置属性上用它做一些操作。

如果要使 16683 个立方体每个立方体具有单独的位置,则可以发出具有相同立方体绑定(属性(的绘制调用,但每次位置统一更改。

您可以为多维数据集的多个实例创建另一个具有 16683 个位置的实例属性pos1,pos1,pos1.....pos16683,pos16683,pos16683。发出绑定了这些属性的实例化绘制调用时,可以在该调用中绘制多维数据集的所有 16683 个实例。而不是使用位置制服,您将拥有另一个属性。

对于您的点,这没有意义,因为它们以 1:1 映射到属性。意思是,您在该属性内分配一个点的位置,不再需要用某种制服来转换它。 使用实例化,您可以将点变成更复杂的内容,例如立方体。

最新更新