Javascript 实例化vs缓冲区几何体vs交错缓冲区

Javascript 实例化vs缓冲区几何体vs交错缓冲区,javascript,three.js,buffer-geometry,geometry-instancing,interleave,Javascript,Three.js,Buffer Geometry,Geometry Instancing,Interleave,我需要绘制数千个点和线,这些点和线具有位置、大小和颜色属性,并且它们的位置是动态的(拖动时交互) 我以前一直在使用缓冲区几何体,但现在我又发现了两件事 实例 交织缓冲器 我想知道这些是什么以及它们是如何工作的?它们的优点和缺点是什么?它们更适合我的情况还是简单的缓冲区几何体最适合我 你能给我一个这三者之间的完整比较吗?交错意味着不是创建多个VBO来包含数据,而是创建一个,然后混合数据。一个缓冲区不是带有v1,v1,v1,v2,v2,v2…和另一个带有c1,c1,c2,c2,c2…,而是带有v1,

我需要绘制数千个点和线,这些点和线具有位置、大小和颜色属性,并且它们的位置是动态的(拖动时交互)

我以前一直在使用缓冲区几何体,但现在我又发现了两件事

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


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

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

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

    不利的一面是,如果你必须循环这个循环并更新位置,例如,但不是颜色,循环可能会稍微复杂一点,如果它只是排队


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

    一种类型是,比如说一个立方体,
    v1,v1,v1,v2,v2,v2….v24,24,24
    ,24个顶点描述一个属性中具有锐边的立方体。您可以有另一个具有24条法线,另一个具有indecis。如果要将其放置在某个位置,可以使用统一,并在“位置”属性上对其执行一些操作

    如果要创建16683个立方体,每个立方体都有一个单独的位置,可以使用相同的立方体边界(属性)发出一个draw调用,但每次都更改位置

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


    对于点,这没有意义,因为它们以1:1的比例映射到属性。也就是说,您指定了一个点的位置,在该属性内部,无需再使用某种统一的方法对其进行变换。通过实例化,您可以将点转化为更复杂的东西,例如立方体

    这两个人并不一定是在竞争。如果需要多次绘制多个具有不同位置(或其他属性)的同一对象,则可能仍会使用缓冲区(交错或不交错),但会立即绘制缓冲区。