three.js创建骨骼动画,使用SkinnedMesh制作蒙皮(vue中使用three.js69)

本文介绍了如何使用three.js创建骨骼蒙皮动画,包括加载hand-1模型、利用JSONLoader、SkinnedMesh和TWEEN库实现手指弯曲和手腕旋转动画。详细步骤从模型加载到渲染过程都有涉及。

1.demo效果

在这里插入图片描述

2.骨骼蒙皮动画介绍

人体有骨骼肌肉和皮肤,在three.js中骨骼的作用和人体的骨骼相同就是骨架,蒙皮即人类的皮肤,只不过它不需要肌肉,骨骼蒙皮动画其实就是通过骨骼的变形蒙皮联动而产生一系列的动画

3. 实现要点

3.1 加载模型文件

与之前一样这里要用到JSONLoader加载器,需要在 public目录下的index.html 文件中引入旧版three.js

<script type="text/javascript" src="./libs/three.js"></script>

在当前vue文件中注释掉引入本地依赖的代码

// import * as THREE from 'three'

加载模型代码如下

// 创建模型
createModels() {
   
   
  const THIS = this
  const publicPath = process.env.BASE_URL
  const loader = new THREE.JSONLoader()
  loader.load(`${
     
     publicPath}models/hand-1.js`, (geometry, material) => {
   
   
    //创建蒙皮
    const mat = new THREE.MeshLambertMaterial({
   
   
      color: 0xf0c8c9,
      skinning: true
    })
    THIS.mesh = new THREE.SkinnedMesh(geometry, mat)

    THIS.mesh.rotation.x = 0.5 * Math.PI
    THIS.mesh.rotation.z = 0.7 * Math.PI
    THIS.scene.add(THIS.mesh)
    //初始化tween动画
    THIS.initTween()
  })
}

3.2 创建tween动画

initTween() {
   
   
  this.animationMap = {
   
    pos: 1 } // 动画变量
  this.tween = new TWEEN.Tween(this.animationMap)
    .to({
   
    pos: 0 }, 3000)
    .easing(TWEEN.Easing.Cubic.InOut)
    .yoyo(true)
    .repeat(Infinity)
    .onUpdate(this.onUpdate)
  this.tween.start()
},
onUpdate() {
   
   
  // 手指弯曲
  const pos = -this.animationMap.pos
  this.mesh.skeleton.bones[5].rotation.set
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值