当前位置: 首页 > news >正文

BufferGeometryUtils

BufferGeometryUtils

描述

  • Three.js 提供的工具类,用于高效处理 BufferGeometry 的复杂操作,包括几何体合并、顶点优化、切线计算等。适用于需要高性能几何体处理的场景(如模型简化、LOD生成、动态几何体更新)。

导入

import * as BufferGeometryUtils from 'three/addons/utils/BufferGeometryUtils.js';

方法

方法参数返回值描述
.computeMikkTSpaceTangents
(geometry, MikkTSpace, negateSign=true)
geometry: BufferGeometry 实例
MikkTSpace: mikktspace 模块实例(需 await MikkTSpace.ready)
negateSign: 是否反转切线符号(.w 分量,默认为 true)
原 BufferGeometry使用 MikkTSpace 算法计算顶点切线,确保与其他建模工具生成的切线一致。适用于法线贴图材质,可避免镜像 UV 接缝处的视觉问题。注意:索引几何体会被解索引,需包含 position/normal/uv 属性。
.computeMorphedAttributes
(object)
object: Mesh/Line/Points 实例{ positionAttribute, normalAttribute, morphedPositionAttribute, morphedNormalAttribute }返回变形/蒙皮对象的当前属性(含原始属性),用于射线检测或贴花(如 DecalGeometry)。
.estimateBytesUsed
(geometry)
geometry: BufferGeometry 实例Number估算几何体所有属性占用的内存字节数。
.interleaveAttributes
(attributes)
attributes: BufferAttribute 数组InterleavedBufferAttributenull交叉存储一组属性(共享 InterleavedBuffer),要求属性类型兼容。失败返回 null。
.mergeAttributes
(attributes)
attributes: BufferAttribute 数组BufferAttributenull合并一组属性为单一实例(不支持 InterleavedBufferAttributes)。失败返回 null。
.mergeGeometries
(geometries, useGroups)
geometries: BufferGeometry 数组
useGroups: 是否生成合并组
BufferGeometrynull合并多个几何体为单一实例,要求属性兼容。失败返回 null。
.mergeGroups
(geometry)
geometry: BufferGeometry 实例BufferGeometry合并给定几何体的渲染组。
.mergeVertices
(geometry, tolerance=1e-4)
geometry: BufferGeometry 实例
tolerance: 顶点合并容差
BufferGeometry返回合并相似顶点后的新几何体(容差范围内)。
.toCreasedNormals
(geometry, creaseAngle)
geometry: 输入几何体
creaseAngle: 折痕角度(弧度)
BufferGeometry生成折痕法线:仅在面夹角大于折痕角时保留硬边。非索引几何体会被直接修改。
.toTrianglesDrawMode
(geometry, drawMode)
geometry: BufferGeometry 实例
drawMode: TrianglesDrawMode 枚举值
BufferGeometry将 TriangleStrip/TriangleFan 模式转换为 TrianglesDrawMode(对应 WebGL 的 gl.TRIANGLES)。

代码

   // 合并多个几何体const mergedGeometry = BufferGeometryUtils.mergeGeometries([geo1, geo2, geo3]);// 去除重复顶点(容差1e-4)const optimizedGeo = BufferGeometryUtils.mergeVertices(mergedGeometry, 1e-4);// 交叉存储属性(提升GPU缓存效率)const interleaved = BufferGeometryUtils.interleaveAttributes([geometry.getAttribute('position'),geometry.getAttribute('normal')
]);
http://www.xdnf.cn/news/306343.html

相关文章:

  • Qt案例 以单线程或者单生产者多消费者设计模式实现QFTP模块上传文件夹功能
  • 基于GA遗传优化的不同规模城市TSP问题求解算法matlab仿真
  • 如何在 Ubuntu 24.04 本地安装 DeepSeek ?
  • STM32H743单片机实现ADC+DMA多通道检测
  • Python生活手册-Numpy数组索引:从快递柜到咖啡店的数字化生活指南
  • 易境通货代系统:如何用一套系统解决货代多业务场景痛点?
  • 机器学习-简要与数据集加载
  • 影刀RPA中使用AI模型
  • java中hashmap源码解析(jdk1.8)
  • 代码mark:脚本获取包含全角字符的字符串的长度
  • php中serialize和unserialize的用法详解
  • 开源模型应用落地-qwen模型小试-Qwen3-8B-推理加速-vLLM-Docker(二)
  • 鸿蒙NEXT开发动画(风格的弹性缩放加载动画组件)
  • 长实公布新盘案名“花语海” 打造全新“维港都会公园圈”
  • Dubbo(99)如何在区块链系统中应用Dubbo?
  • RLOO:将多次其他回答的平均reward作为baseline
  • [250505] Arch Linux 正式登陆 Linux 的 Windows 子系统
  • 电动金属硬密封蝶阀泄露等级:水、蒸汽、油品介质的零泄漏守护方案-耀圣
  • Relay 算子调用流程
  • Java 函数式编程
  • 高斯计校准的重要性
  • 【C语言】推箱子小游戏
  • 初步认识java
  • 精益数据分析(42/126):移动应用商业模式的深度剖析与实战要点
  • 浏览器存储 Cookie,Local Storage和Session Storage
  • 在 Sheel 中运行 Spark:开启高效数据处理之旅
  • 公司项目架构搭建者
  • LXwhat-嘉立创
  • 5G+教育:如何重塑未来课堂?
  • 打造智慧养老实训室,构建科技赋能养老新生态