instancing vs bufferGeometry vs interleavedBuffer

时间:2017-08-23 06:47:32

标签: javascript three.js buffer-geometry geometry-instancing interleave

我需要绘制数千个积分&线条女巫有位置,大小和颜色属性,它们的位置是动态的(交互式拖动)。

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

  1. 实例化
  2. interleaved buffer
  3. 我想知道它们是什么以及它们是如何工作的?它们的优点和缺点是什么?它们对我的情况或简单缓冲区更好几何对我来说最好吗?

    你能否对我这三者进行全面比较?

1 个答案:

答案 0 :(得分:0)

交错意味着您可以创建一个并混合数据,而不是创建多个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个法线,另一个带有indecis。如果你想把它放在某处,你可以使用制服,并在位置属性上对它进行一些操作。

如果你想制作16683立方体,每个立方体都有一个单独的位置,你可以发出一个具有相同立方体边界(属性)的绘图调用,但每次都改变位置均匀。

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

如果你的分数没有意义,因为它们被1:1映射到属性。意思是,您在该属性内部分配一个点的位置,并且不再需要使用某种统一变换它。通过实例化,你可以把你的观点变成更复杂的东西,比如一个立方体。