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

BufferAttribute

BufferAttribute

3D虚拟工厂在线体验

描述

  • BufferAttribute 是 Three.js 中用于高效管理几何体属性数据的核心类,其主要特点包括:
  1. 数据存储
    专为存储 BufferGeometry 的各种属性设计,包括: 顶点位置(position)、法线向量(normal)、颜色值(color)、UV坐标(uv)、面片索引(index)、自定义属性(如实例化数据)

  2. GPU优化
    采用类型化数组(TypedArray)存储数据,通过连续内存布局实现:显存高效传输、适合WebGL底层渲染管线、支持静态/动态数据更新策略

  3. 矢量处理
    数据按矢量单元存储(通过itemSize定义维度)、 所有方法中的index参数会自动乘以矢量长度定位数据

    • 推荐配套方法:
      // 快速读取矢量数据
      const vec = new THREE.Vector3().fromBufferAttribute(attribute, index)
      

构造函数

参数类型可选描述
arrayTypedArray必须是TypedArray类型,包含itemSize * numVertices个元素
itemSizeInteger每个顶点的数据维度(如位置/法线为3,UV为2)
normalizedBoolean是否将整数类型数据归一化到GLSL范围(如UInt16Array→[0,1])

属性

属性类型读写默认值描述
核心属性
.arrayTypedArray读写-存储原始数据的类型化数组。必须使用 TypedArray 类型(如 Float32Array);数据长度必须为 itemSize * 顶点数 的整数倍
.countInteger只读自动计算array.length / itemSize 的结果
.itemSizeInteger读写必填每个元素的组件数(如位置=3,颜色=4)
.normalizedBoolean读写false是否将整数数据归一化到GLSL范围
配置属性
.nameString读写''属性实例的自定义标识名
.usageTHREE.Usage读写THREE.StaticDrawUsage定义GPU内存使用策略
.gpuTypeNumber读写THREE.FloatType着色器数据类型(仅整数数组有效)
状态控制
.needsUpdateBoolean读写false设为true时触发GPU数据更新
.versionInteger读写0数据版本号(修改时自动递增)
.updateRangeObject读写{offset:0, count:-1}局部更新范围配置。更新前10个顶点数据: attribute.updateRange = { offset: 0, count: 10 }attribute.needsUpdate = true
系统属性
.isBufferAttributeBoolean只读true类型标识符
.onUploadCallbackFunction读写nullGPU上传完成回调函数

方法

方法参数返回值描述
矩阵变换
.applyMatrix3(m)m: THREE.Matrix3this应用3x3矩阵变换到每个向量
.applyMatrix4(m)m: THREE.Matrix4this应用4x4矩阵变换到每个向量
.applyNormalMatrix(m)m: THREE.Matrix3this应用法线矩阵变换到每个法向量
.transformDirection(m)m: THREE.Matrix4this仅旋转向量(保持方向性)
数据操作
.set(value, offset)value: Array/TypedArray, offset: Integerthis批量填充数据
.copyArray(array)array: Array/TypedArraythis复制整个数组内容
.copyAt(index1, attr, index2)index1: Integer, attr: BufferAttribute, index2: Integerthis复制单个向量
组件访问
.getComponent(index, component)index: Integer, component: IntegerNumber获取指定分量
.getX(index)index: IntegerNumber获取X分量
.getY(index)index: IntegerNumber获取Y分量
.getZ(index)index: IntegerNumber获取Z分量
.getW(index)index: IntegerNumber获取W分量
组件设置
.setComponent(index, component, value)index: Integer, component: Integer, value: Numberthis设置指定分量
.setX(index, value)index: Integer, value: Numberthis设置X分量
.setY(index, value)index: Integer, value: Numberthis设置Y分量
.setZ(index, value)index: Integer, value: Numberthis设置Z分量
.setW(index, value)index: Integer, value: Numberthis设置W分量
批量设置
.setXY(index, x, y)index: Integer, x: Number, y: Numberthis设置XY分量
.setXYZ(index, x, y, z)index: Integer, x: Number, y: Number, z: Numberthis设置XYZ分量
.setXYZW(index, x, y, z, w)index: Integer, x: Number, y: Number, z: Number, w: Numberthis设置XYZW分量
内存管理
.clone()-BufferAttribute创建数据副本
.onUpload(callback)callback: Functionthis上传GPU回调
.setUsage(value)value: THREE.Usagethis设置内存使用策略
更新控制
.addUpdateRange(start, count)start: Integer, count: Integerthis添加局部更新范围
.clearUpdateRanges()-this清除所有更新范围

示例

  // 1. 创建顶点数据(x,y,z 坐标)const positions = new Float32Array([0, 0, 0,  // 顶点11, 0, 0,  // 顶点20, 1, 0   // 顶点3]);// 2. 创建BufferAttributeconst positionAttribute = new THREE.BufferAttribute(positions, 3); // 3表示每个顶点3个分量(x,y,z)// 3. 添加到几何体const geometry = new THREE.BufferGeometry();geometry.setAttribute('position', positionAttribute);// 4. 创建材质和网格const material = new THREE.MeshBasicMaterial({ color: 0xff0000 });const mesh = new THREE.Mesh(geometry, material);scene.add(mesh); // 在场景中渲染一个红色三角形

相关文章:

  • 双同步坐标锁相环DDSRF-PLL原理说明
  • 专业级软件卸载工具:免费使用,彻底卸载无残留!
  • 力扣题解:1、两数之和 (梦开始的地方)
  • 教育系统源码如何支持白板直播与刷题功能?功能开发与优化探索
  • M0的基础篇之PWM学习
  • 《Python星球日记》 第53天:卷积神经网络(CNN)入门
  • SwarmUI:基于.Net开发的开源AI 图像生成 Web 用户界面系统
  • 如何将 Windows 11 的开始菜单移到左侧
  • JVM 逃逸分析
  • 第十课认识约数
  • Go多服务项目结构优化:为何每个服务单独设置internal目录?
  • 猿人学第十七题—天杀的http2.0
  • 在 Vue 3 中实现刮刮乐抽奖
  • 牛客练习赛138
  • PTA:jmu-ds-拓扑排序
  • JDBC链接数据库
  • 程序代码篇---Python视频流
  • OrangePi Zero 3学习笔记(Android篇)5 - usbutils编译(更新lsusb)
  • DVWA靶场Cryptography模块medium不看原码做法
  • kubectl top 查询pod连接数
  • 乌外长:乌方准备无条件停火至少30天
  • 高龄老人骨折后,生死可能就在家属一念之间
  • 2025年度上海市住房城乡建设管理委工程系列中级职称评审工作启动
  • 上海证监局规范辖区私募经营运作,6月15日前完成自评自纠
  • 【社论】职业上新,勇于“尝新”
  • 101条关于减重的知识,其中一定有你不知道的