Vue 3D Loader 完整使用指南
Vue 3D Loader 是一个基于 Three.js 的 Vue 3D 查看器组件,支持加载多种3D模型格式,包括.dae、.fbx、.gltf、.glb、.obj、.ply、.stl、.json等格式。该组件不仅支持单个模型加载,还能在同一场景中加载多个不同类型的3D模型,并提供了丰富的材质和纹理支持。
项目特性
- 支持加载单个3D模型
- 支持同时加载多个3D模型
- 支持同时加载多种不同类型的3D模型
- 支持Draco gltf模型加载
- 支持自定义文件类型
- 支持设置场景宽度和高度
- 支持材质和纹理设置
- 交互式控制功能
- 鼠标事件支持
- 光照系统
- 相机位置和旋转控制
- 标签点添加功能
安装与配置
安装依赖
npm install vue-3d-loader -S
或者使用Yarn:
yarn add vue-3d-loader
全局注册
在项目入口文件中全局注册组件:
import { createApp } from 'vue'
import App from './App.vue'
import vue3dLoader from 'vue-3d-loader'
createApp(App).use(vue3dLoader).mount('#app')
按需引入
在特定组件中按需引入:
import { vue3dLoader } from 'vue-3d-loader'
export default {
components: { vue3dLoader }
}
核心API详解
基本属性配置
filePath - 文件路径,支持字符串或数组格式,用于指定要加载的3D模型文件。
fileType - 文件类型,当filePath为HTTP URL且不包含文件扩展名时使用。
mtlPath - 材质路径,支持字符串或数组格式,用于设置模型的材质文件。
textureImage - 纹理图片,支持字符串或数组格式,用于设置模型的纹理图片。
场景配置
width - 场景宽度,默认为父元素宽度。
height - 场景高度,默认为父元素高度。
backgroundColor - 场景背景颜色,支持数字、字符串格式。
backgroundAlpha - 背景透明度,取值范围0-1。
模型控制
position - 模型位置坐标,支持对象或数组格式。
rotation - 模型旋转坐标,支持对象或数组格式。
scale - 模型缩放比例,支持对象或数组格式。
相机控制
cameraPosition - 相机位置坐标。
cameraRotation - 相机旋转坐标。
光照系统
lights - 光源配置数组,支持环境光、方向光、点光源、半球光等多种光源类型。
实战应用示例
基础模型加载
<template>
<vue3dLoader
filePath="/models/fbx/Samba Dancing.fbx"
:height="500"
:width="800"
:showFps="true"
/>
</template>
多模型加载场景
<template>
<vue3dLoader
:filePath="[
'/models/fbx/Samba Dancing.fbx',
'/models/collada/pump/pump.dae'
]"
:position="[
{ x: 0, y: 0, z: 0 },
{ x: 100, y: 100, z: 100 }
]"
:rotation="[
{ x: 0, y: 0, z: 0 },
{ x: 10, y: 1, z: 1 }
]"
:scale="[
{ x: 0.4, y: 0.4, z: 0.4 },
{ x: 0.8, y: 0.8, z: 0.8 }
]"
/>
</template>
材质和纹理配置
<template>
<!-- obj模型和mtl材质 -->
<vue3dLoader
filePath="/models/obj/1.obj"
mtlPath="/models/obj/1.mtl"
/>
<!-- fbx模型和png纹理 -->
<vue3dLoader
filePath="/models/fbx/1.fbx"
textureImage="/textures/1.png"
/>
</template>
交互控制配置
<template>
<div class="controls">
<button @click="enablePan = !enablePan">
{{ enablePan ? "禁用" : "启用" }} 平移
</button>
<button @click="enableZoom = !enableZoom">
{{ enableZoom ? "禁用" : "启用" }} 缩放
</button>
<button @click="enableRotate = !enableRotate">
{{ enableRotate ? "禁用" : "启用" }} 旋转
</button>
<vue3dLoader
filePath="/models/collada/elf/elf.dae"
:controlsOptions="{
enablePan,
enableZoom,
enableRotate,
}"
:cameraPosition="{ x: 0, y: -10, z: 13 }"
/>
</div>
</template>
<script setup lang="ts">
import { ref } from 'vue'
const enablePan = ref(true)
const enableZoom = ref(true)
const enableRotate = ref(true)
</script>
事件处理
<template>
<vue3dLoader
filePath="/models/ply/Lucy100k.ply"
@mousemove="onMouseMove"
@click="onClick"
/>
</template>
<script setup lang="ts">
function onMouseMove(event, intersected) {
if (intersected) {
intersected.object.material.color.setStyle("#13ce66")
}
</script>
高级功能应用
Draco模型加载
<template>
<vue3dLoader
filePath="/models/gltf/LittlestTokyo.glb"
:enableDraco="true"
dracoDir="/draco/"
outputEncoding="sRGB"
/>
</template>
标签系统配置
<template>
<vue3dLoader
filePath="/models/collada/elf/elf.dae"
:labels="[
{
image: '/assets/label1.png',
text: '重要部件',
textStyle: {
fontFamily: 'Arial',
fontSize: 18,
color: '#ffffff',
},
position: { x: 10, y: 20, z: 5 },
}
]"
/>
</template>
项目部署
Docker部署
docker build -t vue/vue-3d-loader .
docker run -p 8010:80 vue/vue-3d-loader
项目结构说明
Vue 3D Loader 项目包含完整的示例代码,位于 src/examples/ 目录下,涵盖从基础模型加载到高级交互控制的各种应用场景。
项目提供了丰富的模型示例文件,包括Collada格式的精灵、泵、冲锋队员模型,FBX格式的桑巴舞模型,GLTF格式的受损头盔模型,以及PLY、STL等多种格式的3D模型文件。
最佳实践建议
-
模型优化:对于大型场景,建议使用Draco压缩技术来减小模型文件大小。
-
性能监控:在生产环境中启用FPS显示,实时监控渲染性能。
-
渐进加载:对于复杂场景,可以启用并行加载功能来提升用户体验。
-
交互反馈:合理使用鼠标事件和标签系统,为用户提供直观的操作反馈。
Vue 3D Loader 为Vue开发者提供了强大的3D模型加载和展示能力,无论是产品展示、教育培训还是虚拟现实应用,都能提供专业级的3D可视化解决方案。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考




