Three.js 什么是缓冲几何

Three.js 什么是缓冲几何,three.js,Three.js,有人能给我解释一下在三种情况下什么是缓冲几何吗?它与普通几何体有何不同。他们不是在给显卡打同样的电话吗?此外,在制作地形解决方案时,使用BufferedGeometry是否会提高速度。目前,我已经创建了一个地形解决方案,它使用数百个彼此相邻的小网格。与使用单个PlaneGeometry对象相比,该方法在速度上略有提高(可能是因为mip映射和剔除更容易应用)。然而,它仍然不太好,在大地形上的性能变得不稳定-我想知道我是应该追求BufferedGeometry,还是仅仅接受我现在的解决方案,并将其限

有人能给我解释一下在三种情况下什么是缓冲几何吗?它与普通几何体有何不同。他们不是在给显卡打同样的电话吗?此外,在制作地形解决方案时,使用BufferedGeometry是否会提高速度。目前,我已经创建了一个地形解决方案,它使用数百个彼此相邻的小网格。与使用单个PlaneGeometry对象相比,该方法在速度上略有提高(可能是因为mip映射和剔除更容易应用)。然而,它仍然不太好,在大地形上的性能变得不稳定-我想知道我是应该追求BufferedGeometry,还是仅仅接受我现在的解决方案,并将其限制在小地图上?
谢谢:)

缓冲几何体是向gpu发送数据的另一种方式。是的,这是一个速度提升,所以你可以尝试一下

几何体看起来像这样

class Geometry {

   this.vertices = []; //javascript array
   this.faces = [];    //another javascript array
   this.uvs = [];
   ...
}
它只是一个JS类

这些数组包含一些复杂的内容、其他类和结构

this.vertices[0]
将是一个
THREE.Vector3
,它是另一个类-具有数据和方法,但数据只是三个浮点,因此非常简单。可能是一个数组[x,y,z],而不是一个有成员的对象,但这样你就不会有方法了

这个.faces[0]
更复杂。它将索引保存到顶点,从而形成三角形(a、b、c),但它也可以保存诸如面法线(另一个向量3)、切线、副法线、每面颜色等内容

在第三种情况下,这也是存储顶点法线的位置

WebGL不知道如何解释这些东西。它理解typedArrays,因此为了在GPU上开始使用几何图形,它需要转换为WebGL友好的格式

这就是缓冲几何体。这是相同的数据,以不同的方式组织,对低级gpu更加友好

没有javascript类,没有方法,没有引用。您必须了解这些阵列是如何填充的,并管理偏移和大小

三个JS对象
三个.Vector3
变成一个
Float32Array(9)
[xyzxyzxyz]。 Face没有空间存储所有这些东西,它只是另一个阵列中的另一个订单:

UINT16阵列(3)[0,1,2](意思是:用顶点0、1和2组成一个三角形,意思是在偏移量0*3、1*3和2*3处向上查看该顶点阵列

这就是它的特点。更快,更少的内存,更少的灵活性

如果要使用着色器操纵地形,则应使用bufferGeometry。如果要执行诸如“查找此三角形或此顶点的最近邻居”之类的查找,则最有可能需要结构,因此您可以自己构建或使用
几何体