news 2026/8/11 7:49:41

Threejs的InstancedMesh

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Threejs的InstancedMesh

InstancedMesh是 Three.js 中用于高效渲染大量相同几何体和材质的对象的核心类。它通过单次绘制调用(Draw Call)完成所有实例的渲染,大幅提升性能。

一、核心概念与创建

const mesh = new THREE.InstancedMesh(geometry, material, count);
  • geometry:共享的几何体(BufferGeometry类型)。
  • material:共享的材质(Material类型)。
  • count:实例的最大数量(创建后不可修改)。

二、设置实例属性

1.位置与旋转(通过矩阵控制)

const matrix = new THREE.Matrix4(); // 创建一个4x4变换矩阵 const position = new THREE.Vector3(1, 0, 0); // 实例的位置 const quaternion = new THREE.Quaternion(); // 旋转四元数 const scale = new THREE.Vector3(1, 1, 1); // 缩放 matrix.compose(position, quaternion, scale); // 组合变换 mesh.setMatrixAt(index, matrix); // 应用到第 index 个实例 mesh.instanceMatrix.needsUpdate = true; // 必须更新标记!
2.设置颜色
const color = new THREE.Color(0xff0000); // 红色 mesh.setColorAt(index, color); // 设置第 index 个实例颜色 mesh.instanceColor.needsUpdate = true; // 必须更新标记!
  • 需启用顶点着色器中的颜色插值(材质属性vertexColors: true)。

三、完整示例代码

// 1. 创建几何体与材质 const geometry = new THREE.IcosahedronGeometry(0.5, 5); // 二十面体 const material = new THREE.MeshPhongMaterial({ color: 0xffffff, vertexColors: true // 允许实例化颜色 }); // 2. 创建1000个实例 const count = 1000; const instancedMesh = new THREE.InstancedMesh(geometry, material, count); // 3. 为每个实例设置位置和颜色 const matrix = new THREE.Matrix4(); const color = new THREE.Color(); for (let i = 0; i < count; i++) { // 位置随机偏移 matrix.setPosition( Math.random() * 10 - 5, Math.random() * 10 - 5, Math.random() * 10 - 5 ); instancedMesh.setMatrixAt(i, matrix); // 颜色随机 color.setHex(Math.random() * 0xffffff); instancedMesh.setColorAt(i, color); } // 4. 标记属性更新 instancedMesh.instanceMatrix.needsUpdate = true; instancedMesh.instanceColor.needsUpdate = true; // 5. 添加到场景 scene.add(instancedMesh);

四、关键注意事项

  1. 性能优化

    • 避免在动画循环中频繁更新矩阵或颜色,仅在初始化或变化时更新。
    • 超过千级数量时性能优势显著,少量对象无需使用。
  2. 限制

    • 所有实例共享同一几何体和材质,无法单独修改。
    • 创建后count不可更改(需重新创建实例化网格)。
  3. 常见错误

    • 忘记设置needsUpdate = true(矩阵/颜色不会生效)。
    • 未启用材质的vertexColors导致颜色失效。
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/10 7:00:02

Qwen3-VL-8B中文多模态实测:懂语境更懂中国用户

Qwen3-VL-8B中文多模态实测&#xff1a;懂语境更懂中国用户 在电商客服收到一张模糊的衣物照片&#xff0c;用户问&#xff1a;“这油渍能洗掉吗&#xff1f;” 如果系统只能回答“图片包含深色斑点”&#xff0c;那毫无意义。 但若它能结合布料纹理、污渍形态和生活常识说&…

作者头像 李华
网站建设 2026/8/10 17:44:30

Axios网络请求优化(缓存)

合理使用缓存&#xff0c;避免重复请求// 通过缓存机制&#xff0c;存储已经发出的请求结果&#xff0c;如果同样的请求再次发起&#xff0c; // 直接从缓存中获取数据&#xff0c;而不是重新发请求。import axios from "axios";// 缓存对象 const cache new Map<…

作者头像 李华
网站建设 2026/8/9 6:06:11

通过短时倒谱(Cepstrogram)计算进行时-倒频分析研究附Matlab代码

✅作者简介&#xff1a;热爱科研的Matlab仿真开发者&#xff0c;擅长数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。&#x1f34e; 往期回顾关注个人主页&#xff1a;Matlab科研工作室&#x1f34a;个人信条&#xff1a;格物致知,完整Matlab代码及仿真咨询…

作者头像 李华
网站建设 2026/8/10 0:40:02

无人机启用的无线传感器网络中的节能数据收集附Matlab代码

✅作者简介&#xff1a;热爱科研的Matlab仿真开发者&#xff0c;擅长数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。&#x1f34e; 往期回顾关注个人主页&#xff1a;Matlab科研工作室&#x1f34a;个人信条&#xff1a;格物致知,完整Matlab代码及仿真咨询…

作者头像 李华
网站建设 2026/8/10 7:56:03

[特殊字符]️ 羽毛球检测数据集介绍-1686张图片 运动赛事分析 智能健身设备 自动裁判系统 体育视频内容分析 机器人运动训练

&#x1f4e6;点击查看-已发布目标检测数据集合集&#xff08;持续更新&#xff09; 数据集名称图像数量应用方向博客链接&#x1f50c; 电网巡检检测数据集1600 张电力设备目标检测点击查看&#x1f525; 火焰 / 烟雾 / 人检测数据集10000张安防监控&#xff0c;多目标检测点…

作者头像 李华