three BufferGeometryUtils

461 阅读4分钟

在 Three.js 中,BufferGeometryUtils 是一个实用工具库,主要用于操作和优化 BufferGeometry 对象。它提供了一些常用的方法,可以帮助开发者更高效地处理几何体。

BufferGeometryUtils 有十个静态方法

    // 创建两个几何体
    const boxGeometry = new THREE.BoxGeometry(1, 1, 1); // 一个立方体
    const sphereGeometry = new THREE.SphereGeometry(0.5, 32, 32); // 一个球体
    // 调整球体位置以避免重叠
    sphereGeometry.translate(1.5, 0, 0); // 平移球体到右侧
    // 合并几何体
    const mergedGeometry = BufferGeometryUtils.mergeGeometries([boxGeometry, sphereGeometry], true);
    // 创建材质
    const material = new THREE.MeshBasicMaterial({ color: 0x00ff00, wireframe: true });
    // 创建网格
    const mesh = new THREE.Mesh(mergedGeometry, material);
    scene.add(mesh);
  • computeMikkTSpaceTangents ( geometry : BufferGeometry, MikkTSpace : Object, negateSign : Boolean = true ) : Object computeMikkTSpaceTangents 是 Three.js 中一个强大的工具,用于基于 MikkTSpace 算法计算切线(tangents)。这种方法通常用于高质量法线贴图(normal mapping)渲染,尤其是在使用 PBR(物理渲染材质)时。
    • geometry
      • 类型:BufferGeometry
      • 描述:需要计算切线的几何体。必须包含以下属性:
        • position:顶点位置。
        • uv:UV 贴图坐标。
        • normal:法线向量。
    • MikkTSpace
      • 类型:Object
      • 描述:提供 MikkTSpace 算法的实现。需要一个支持以下接口的对象:
        • getNumFaces(geometry): 返回几何体的三角形面数量。
        • getNumVerticesOfFace(faceIndex): 返回指定三角形面的顶点数量。
        • getPosition(faceIndex, vertexIndex, position): 获取指定顶点的位置。
        • getNormal(faceIndex, vertexIndex, normal): 获取指定顶点的法线。
        • getTexCoord(faceIndex, vertexIndex, uv): 获取指定顶点的 UV 坐标。
        • setTSpaceBasic(faceIndex, vertexIndex, tangent, sign): 设置指定顶点的切线和符号。
    • negateSign (可选
      • 类型:Boolean
      • 默认值:true
        • 描述:是否反转切线符号。通常在法线方向需要调整时使用。
  • computeMorphedAttributes ( [param:Mesh | Line | Points object] ) : Object computeMorphedAttributes 是 Three.js 中用于计算带有变形目标(morph targets)的几何体的属性的方法。它适用于 MeshLinePoints 类型的对象,这些对象的几何体可能包括位置、法线、颜色等变形目标数据。
  • estimateBytesUsed ( geometry : BufferGeometry ) : Number estimateBytesUsed 是 BufferGeometryUtils 中的一个静态方法,用于估算一个 BufferGeometry 对象在内存中的占用字节数。这对于优化性能和管理内存非常有用,尤其是在 WebGL 和 Three.js 中使用大量几何体时。
  • interleaveAttributes ( attributes : Array ) : InterleavedBufferAttribute interleaveAttributesBufferGeometryUtils 中的一个静态方法,用于将多个属性(如位置、法线、UV 等)合并(交错)到一个 InterleavedBufferAttribute 中。这个方法有助于优化数据存储和传输,特别是在 WebGL 中处理多个几何体的情况下。 interleaveAttributes 是一个非常实用的工具,尤其是在处理大规模几何体时,它帮助将多个属性数据交错存储,优化渲染性能,减少 WebGL 中的绘制调用。
  • mergeAttributes ( attributes : Array ) : BufferAttribute mergeAttributes 是 BufferGeometryUtils 中的一个静态方法,用于将多个 BufferAttribute 对象合并成一个单一的 BufferAttribute。该方法通常用于优化几何体的存储,使得属性(如顶点位置、法线、颜色等)能够按顺序存储在同一个缓冲区中,以提高 GPU 的性能。
  • mergeGeometries ( geometries : Array, useGroups : Boolean ) : BufferGeometry geometries -- 由 BufferGeometry 实例的数组。 useGroups -- 是否要为了合并几何体而产生组。 将一组几何体合并到一个实例中。所有几何体都必须兼容该属性。 如果合并不成功,则该方法返回 null。
  • mergeGroups ( geometry : BufferGeometry ) : BufferGeometry mergeGroupsBufferGeometryUtils 中的一个静态方法,用于将多个几何体组(groups)合并为一个单一的几何体组。该方法的主要作用是优化渲染过程中的组管理,使得在一个几何体中合并多个子组,从而减少 WebGL 渲染时的切换和处理。
  • mergeVertices ( geometry : BufferGeometry, tolerance : Number ) : BufferGeometry - geometry -- 用于合并顶点的 BufferGeometry 实例。 tolerance -- 要合并的顶点属性之间允许的最大差异。 默认为 1e-4。 返回一个新的 BufferGeometry ,其中包含将所有(在容差范围内的)具有相似属性的顶点合并而成的顶点。
  • toCreasedNormals ( geometry : BufferGeometry, creaseAngle : Number ) : BufferGeometry toCreasedNormals 是 BufferGeometryUtils 中的一个静态方法,用于基于给定的折痕角度(creaseAngle)来计算几何体的法线,使得相近的法线在折痕处能够分开。这通常用于处理有锐角或者不连续的表面,使得模型的法线处理更加准确,避免出现光照或材质贴图上的不连续或错误效果。
    • geometry (BufferGeometry):需要计算折痕法线的几何体。
    • creaseAngle (number):折痕角度,用来决定在哪些地方生成折痕。如果两个法线之间的夹角大于此值,它们会被视为属于不同的面,分别计算法线。
  • toTrianglesDrawMode ( geometry : BufferGeometry, drawMode : TrianglesDrawMode ) : BufferGeometry toTrianglesDrawMode 是 BufferGeometryUtils 中的一个静态方法,用于将几何体的绘制模式转换为三角形模式。此方法常用于将几何体的面类型(如 quads、lines 等)转换为三角形形式,确保其能够被 WebGL 正确渲染。
    • geometry (BufferGeometry):需要转换的几何体对象,通常是多边形或其他非三角形类型的几何体。 -drawMode (TrianglesDrawMode):指定转换后的绘制模式,通常为三角形绘制模式。Three.js 支持几种不同的绘制模式,TrianglesDrawMode 是其中的一个。