更新记录
1.0.0(2026-04-10)
1.0.0(2026-04-10)
- 首次发布
- 支持 H5 和微信小程序双端 GLB 模型渲染
- 支持 Draco 压缩解码
- 自适应容器尺寸
- 触控旋转、双指缩放
- 内置加载进度条
- 伴侣动画系统(idle / curious / happy)
- WebGL 上下文丢失自动恢复
- 主/备地址自动切换
平台兼容性
uni-app(4.64)
| Vue2 | Vue3 | Chrome | Safari | app-vue | app-nvue | Android | iOS | 鸿蒙 |
|---|---|---|---|---|---|---|---|---|
| √ | √ | √ | √ | - | - | - | - | - |
| 微信小程序 | 支付宝小程序 | 抖音小程序 | 百度小程序 | 快手小程序 | 京东小程序 | 鸿蒙元服务 | QQ小程序 | 飞书小程序 | 小红书小程序 | 快应用-华为 | 快应用-联盟 |
|---|---|---|---|---|---|---|---|---|---|---|---|
| √ | - | - | - | - | - | - | - | - | - | - | - |
Three-Glb 3D模型渲染组件
基于 Three.js 的 GLB/Draco 3D 模型渲染组件,兼容 H5 和微信小程序(安卓/iOS/鸿蒙)。
特性
- 支持 H5 和微信小程序双端
- 支持 Draco 压缩的 GLB 模型
- 自适应任意尺寸父容器,不变形
- 触控旋转、双指缩放
- 内置加载进度条(可自定义 GIF)
- 伴侣动画系统(idle / curious / happy 三种模式,支持自动循环)
- WebGL 上下文丢失自动恢复
- 主地址失败自动切换备用地址
- 可配置光照(环境光、主方向光、补光)
平台兼容性
| H5 | 微信小程序 | 支付宝小程序 | 百度小程序 | 抖音小程序 | QQ小程序 | App |
|---|---|---|---|---|---|---|
| ✅ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ |
安装
从 uni-app 插件市场导入本插件。
依赖说明
微信小程序端需要安装以下 npm 依赖:
npm install three-platformize
H5 端需要安装:
npm install three
基本用法
<template>
<view style="width: 100%; height: 600rpx;">
<Three-Glb
:src="modelUrl"
:draco="true"
:autoRotate="true"
@loaded="onLoaded"
@error="onError"
@progress=""
/>
</view>
</template>
<script>
export default {
data() {
return {
modelUrl: 'https://example.com/model.glb'
}
},
methods: {
onLoaded(gltf) {
console.log('模型加载完成', gltf);
},
onError(err) {
console.error('加载失败', err);
},
({ loaded, total, ratio }) {
console.log('加载进度', ratio);
}
}
}
</script>
属性(Props)
| 属性名 | 类型 | 默认值 | 说明 |
|---|---|---|---|
| src | String | (必填) | GLB 模型地址 |
| fallbackSrc | String | '' | 备用模型地址,主地址失败时自动重试 |
| draco | Boolean | true | 模型是否使用了 Draco 压缩 |
| dracoDecoderPath | String | '' | Draco 解码器路径(H5端),留空使用 CDN |
| scenebg | String | '' | 场景背景色,如 '#ffffff',留空为透明 |
| autoRotate | Boolean | false | 是否自动旋转 |
| modelScale | Number | 1.1 | 模型缩放比例 |
| ambientintensity | Number | 2 | 环境光强度(0~2) |
| ambientcolor | String | '#ffffff' | 环境光颜色 |
| dirintensity | Number | 3 | 主方向光强度(0~3) |
| dircolor | String | '#ffffff' | 主方向光颜色 |
| fillintensity | Number | 2 | 补光强度(0~2) |
| fillcolor | String | '#ffffff' | 补光颜色 |
| showLoading | Boolean | true | 是否显示内置 loading |
| loadingGif | String | (内置默认) | 加载动画 GIF 图片地址 |
| animateMode | String | 'none' | 伴侣动画模式:'none' / 'idle' / 'curious' / 'happy' |
| animateCycle | Boolean | false | 是否自动循环切换动画模式 |
| animateDuration | Number/Object | 5 | 每个动画模式持续时长(秒),可传对象 { idle: 5, curious: 3, happy: 4 } |
事件(Events)
| 事件名 | 参数 | 说明 |
|---|---|---|
| loaded | gltf | 模型加载完成 |
| error | error | 加载或初始化失败 |
| progress | { loaded, total, ratio } | 加载进度 |
| load-progress | Number | 进度百分比(0~100) |
| fps | Number | 每秒帧率 |
| shake | — | triggerShake 被调用时触发 |
| context-lost | — | WebGL 上下文丢失 |
| context-restored | — | WebGL 上下文恢复 |
| animate-mode-change | String | 动画模式切换 |
方法(Methods)
通过 ref 调用:
| 方法名 | 参数 | 说明 |
|---|---|---|
| revive() | — | 检测并恢复 WebGL 上下文(适合在 onShow 时调用) |
| triggerShake(intensity) | intensity: Number(默认 0.3) | 触发模型抖动 + 弹跳效果 |
| dispose() | — | 手动销毁,释放所有资源 |
伴侣动画
组件内置三种动画模式,适合做虚拟伴侣/宠物场景:
idle:缓慢呼吸浮动,偶尔转头curious:快速呼吸,频繁转头,好奇状态happy:快速呼吸 + 身体微颤,开心状态
开启 animateCycle 后会自动按 idle → curious → happy 循环切换。
注意事项
- 父容器必须有明确的宽高,组件会自适应父容器尺寸
- 微信小程序端使用
three-platformize渲染,H5 端使用原生three - 小程序端 Draco 解码在主线程执行(小程序不支持 Web Worker),大模型可能短暂卡顿
- 如果 GLB 没有使用 Draco 压缩,请设置
:draco="false"以跳过解码器加载 - OSS 链接带签名时,组件已自动处理 content-type 请求头兼容问题

收藏人数:
购买普通授权版(
试用
赞赏(0)
下载 104
赞赏 1
下载 11544004
赞赏 1903
赞赏
京公网安备:11010802035340号