更新记录

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 循环切换。

注意事项

  1. 父容器必须有明确的宽高,组件会自适应父容器尺寸
  2. 微信小程序端使用 three-platformize 渲染,H5 端使用原生 three
  3. 小程序端 Draco 解码在主线程执行(小程序不支持 Web Worker),大模型可能短暂卡顿
  4. 如果 GLB 没有使用 Draco 压缩,请设置 :draco="false" 以跳过解码器加载
  5. OSS 链接带签名时,组件已自动处理 content-type 请求头兼容问题

隐私、权限声明

1. 本插件需要申请的系统权限列表:

2. 本插件采集的数据、发送的服务器地址、以及数据用途说明:

3. 本插件是否包含广告,如包含需详细说明广告表达方式、展示频率:

暂无用户评论。