在基础 3D 场景搭建完成后,实际开发中常需加载外部 3D 模型(如 GLB 格式)丰富场景内容。以下将详细讲解在 Vue2 + Three.js 环境中加载 GLB 模型的完整流程,包括依赖引入、模型加载、状态管理及交互优化。
GLB 模型加载需要 Three.js 配套的加载器,需额外引入 GLTFLoader(GLB 是 GLTF 格式的二进制版本,共用同一加载器)和加载进度辅助工具 DRACOLoader(可选,用于加载压缩后的 GLB 模型)。
<!-- 引入GLTF/GLB加载器 -->
<script src="https://unpkg.com/three@0.128.0/examples/js/loaders/GLTFLoader.js"></script>
在 data 中添加加载器相关变量:
data() {
return {
// 原有变量...
loader: null, // GLB加载器实例
};
}
在mounted中初始化加载模型:
mounted() {
// 其他初始化方法...
// 加载模型
this.loadModel();
},
在 initThreeScene 方法中创建加载器:
initThreeScene() {
// 原有场景、相机、渲染器、控制器初始化...
// 创建加载器
this.loader = new THREE.GLTFLoader();
// 原有初始化内容(创建初始物体、光源、启动动画)
}
在 Vue 实例的 methods 中添加模型加载方法,支持指定模型路径:
methods: {
// 加载GLB模型核心方法
loadModel() {
// 加载glb模型
this.loader.load('https://threejs.org/examples/models/gltf/DamagedHelmet/glTF/DamagedHelmet.gltf', (gltf) => {
// 将模型添加到场景
this.scene.add(gltf.scene);
}
);
},
public/models 目录下,通过 /models/your-model.glb 路径访问。http-server 或 VS Code 的 Live Server 插件)。.glb(区分大小写)。dracoLoader.setDecoderPath 指向的解码库路径正确。model.scale 比例(如 scale.set(0.1, 0.1, 0.1) 缩小10倍)。model.position 或相机位置 camera.position。castShadow/receiveShadow 设为 false)。BufferGeometryUtils.mergeBufferGeometries)减少绘制调用。通过以上步骤,已实现 Vue2 + Three.js 环境中 GLB 模型的加载、显示、动画播放和交互功能。核心流程可概括为:
这种实现方式保留了 Vue2 的响应式特性和 Three.js 的 3D 渲染能力,可灵活应用于产品展示、虚拟展厅、游戏等交互式 3D 应用场景。
GLB 模型加载是 Three.js 开发中的重要环节,掌握这一技能可以让你在 Vue2 项目中创建更加丰富和交互性的 3D 场景。