实例化与 bufferGeometry 与 interleavedBuffer
instancing vs bufferGeometry vs interleavedBuffer
我需要绘制数千个点和线 具有位置、大小和颜色属性,并且它们的位置是动态的(在拖动时交互)。
直到现在我一直在使用缓冲区几何,但现在我又发现了两个东西
- 实例化
- 交错缓冲区
我想知道这些是什么以及它们是如何工作的?它们的优点和缺点是什么?它们更适合我的情况还是简单的缓冲区几何最适合我?
你能给我一个完整的三者比较吗?
Interleaving 意味着不是创建多个 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 个立方体,每个立方体都有一个单独的位置,您可以使用相同的立方体边界(属性)发出绘制调用,但每次都统一更改位置。
您可以创建另一个实例属性,pos1,pos1,pos1.....pos16683,pos16683,pos16683
具有 16683 个位置的多维数据集实例。当您发出绑定了这些属性的实例化绘制调用时,您可以在该调用中绘制立方体的所有 16683 个实例。您将拥有另一个属性,而不是使用位置制服。
对于您的点,这没有意义,因为它们已映射 1:1 到属性。意思是,您在该属性内部分配一个点的位置,不再需要使用某种制服对其进行转换。通过实例化,您可以将您的点变成更复杂的东西,比如立方体。
我需要绘制数千个点和线 具有位置、大小和颜色属性,并且它们的位置是动态的(在拖动时交互)。
直到现在我一直在使用缓冲区几何,但现在我又发现了两个东西
- 实例化
- 交错缓冲区
我想知道这些是什么以及它们是如何工作的?它们的优点和缺点是什么?它们更适合我的情况还是简单的缓冲区几何最适合我?
你能给我一个完整的三者比较吗?
Interleaving 意味着不是创建多个 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 个立方体,每个立方体都有一个单独的位置,您可以使用相同的立方体边界(属性)发出绘制调用,但每次都统一更改位置。
您可以创建另一个实例属性,pos1,pos1,pos1.....pos16683,pos16683,pos16683
具有 16683 个位置的多维数据集实例。当您发出绑定了这些属性的实例化绘制调用时,您可以在该调用中绘制立方体的所有 16683 个实例。您将拥有另一个属性,而不是使用位置制服。
对于您的点,这没有意义,因为它们已映射 1:1 到属性。意思是,您在该属性内部分配一个点的位置,不再需要使用某种制服对其进行转换。通过实例化,您可以将您的点变成更复杂的东西,比如立方体。