当前位置: 首页 > 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); // 在场景中渲染一个红色三角形
http://www.xdnf.cn/news/381817.html

相关文章:

  • vs查看dmp崩溃信息
  • Python递归函数
  • 【TypeScript】类型别名(Type Alias)与接口类型(Interface)
  • Redisson 看门狗机制
  • Unity3D仿星露谷物语开发41之创建池管理器
  • 记录一次window2012r2安装配置oracle11g的过程-出现的错误以及解决方法
  • 谷歌学术链接
  • OSPF综合应用
  • Nginx高级配置
  • 解锁HBase:大数据存储的神秘之门
  • Linux:线程同步与互斥
  • 《Python星球日记》 第52天:反向传播与优化器
  • MySQL 数据类型全面指南:从理论到实践
  • HCIP笔记
  • Veins同时打开SUMO和OMNeT++的GUI界面
  • 基于Arduino Nano的DIY示波器
  • 2505d,d的借用检查器
  • 基于Spring Boot + Vue的母婴商城系统( 前后端分离)
  • InnoDB结构与表空间文件页的详解
  • 前端性能优化
  • Pycharm(二十)张量的运算与操作
  • Webug4.0靶场通关笔记-靶场搭建方法(3种方法)
  • Kubernetes生产实战(十三):灰度发布与蓝绿发布实战指南
  • 关于流媒体的知识总结
  • 全息美AISEO引领未来智能营销新趋势
  • SRP单一职责原则
  • 备战菊厂笔试3
  • short变量赋值为32768, 实际为什么是-32768?不同语言的不同进制字面量?字面量?编程语言的基本类型?
  • Java、Python、NodeJS等开发环境安装及配置镜像加速到国内源
  • .Net HttpClient 使用准则