Three.js中文网 Three.js中文网
首页
免费视频
系统课 (opens new window)
  • Three.js基础课程
  • Vue3+Threejs 3D可视化
  • Threejs进阶课程
  • 展厅3D预览漫游
  • Threejs Shader
  • Blender建模基础
  • Three.js基础课程(旧版本) (opens new window)
  • 文章
WebGPU教程
  • WebGL教程
  • WebGL教程(旧版本) (opens new window)
3D案例
  • 本站部署(打开快) (opens new window)
  • 原英文官网文档 (opens new window)
首页
免费视频
系统课 (opens new window)
  • Three.js基础课程
  • Vue3+Threejs 3D可视化
  • Threejs进阶课程
  • 展厅3D预览漫游
  • Threejs Shader
  • Blender建模基础
  • Three.js基础课程(旧版本) (opens new window)
  • 文章
WebGPU教程
  • WebGL教程
  • WebGL教程(旧版本) (opens new window)
3D案例
  • 本站部署(打开快) (opens new window)
  • 原英文官网文档 (opens new window)
Web3D系统课程视频
  • 0.学前说明

  • 1.Three.js快速入门

  • 2.几何体BufferGeometry

  • 3.模型对象、材质

  • 4.层级模型

  • 5.顶点UV坐标、纹理贴图

  • 6.加载外部三维模型(gltf)

  • 7.PBR材质与纹理贴图

  • 8.渲染器和前端UI界面

  • 9.生成曲线、几何体

  • 10.相机基础

  • 11.光源和阴影

  • 12.精灵模型Sprite

  • 13.后处理EffectComposer

  • 14.射线拾取模型

  • 15.场景标注标签信息

  • 16.关键帧动画

    • 1. 关键帧动画
    • 2. 动画播放(暂停、倍速、循环)
    • 3. 动画播放(拖动任意时间状态)
    • 4. 解析外部模型关键帧动画
    • 5. 机械虚拟装配案例(播放)
    • 6. 虚拟装配(任意时间定位)
    • 7. 变形动画原理
    • 8. 变形动画(定制人物胖瘦)
    • 9. 骨骼关节Bone
    • 10. 查看外部模型骨骼动画
    • 11. 骨骼动画不同动作切换
    • 17.动画库tween.js

    • Three.js教程
    • 16.关键帧动画
    郭隆邦
    2023-03-25
    目录

    11. 骨骼动画不同动作切换

    # 骨骼动画不同动作切换

    Three.js实际开发时候,有时候需要需要切换不同动作的动画。比如一个人从休息状态切换为跑步状态,从走路状态切换为休息状态。

    # 查看人骨骼动画几组动画数据

    课件中gltf模型gltf.animations包含四个关键帧动画对象AnimationClip,分别对应休息、跑步等动作。

    console.log('控制台查看gltf对象结构', gltf);
    // gltf.animations[0] Idle  休息
    // gltf.animations[1] Run   跑步
    // gltf.animations[2] TPose T形静止展开
    // gltf.animations[3] Walk  走路
    const mixer = new THREE.AnimationMixer(gltf.scene);
    const clipAction = mixer.clipAction(gltf.animations[3]);//走路
    

    # 切换动画不同动作(.play()和.stop())

    点击下面按钮切换骨骼动画的不同动作。

    <div id="Idle" class="bu">休息</div>
    <div id="Run" class="bu" style="margin-left: 10px;">跑步</div>
    <div id="Walk" class="bu" style="margin-left: 10px;">走路</div>
    

    点击按钮,按钮对应的动作对象AnimationAction,执行.play()方法开始动画执行,原来执行中的动画动作对象,执行.stop()方法终止执行。

    const IdleAction = mixer.clipAction(gltf.animations[0]);
    const RunAction = mixer.clipAction(gltf.animations[1]);
    const WalkAction = mixer.clipAction(gltf.animations[3]);
    IdleAction.play();
    let ActionState = IdleAction;//当前处于播放状态的动画动作对象
    // 通过UI按钮控制,切换动画运动状态
    document.getElementById('Idle').addEventListener('click', function () {
        ActionState.stop();//播放状态动画终止
        IdleAction.play();
        ActionState = IdleAction;
    })
    document.getElementById('Run').addEventListener('click', function () {
        ActionState.stop();//播放状态动画终止
        RunAction.play();
        ActionState = RunAction;
    })
    document.getElementById('Walk').addEventListener('click', function () {
        ActionState.stop();//播放状态动画终止
        WalkAction.play();
        ActionState = WalkAction;
    })
    

    # AnimationAction的权重属性.weight

    骨骼动画的多个动画动作对象同时播放,会共同作用于人的骨骼动画。

    const IdleAction = mixer.clipAction(gltf.animations[0]);
    const RunAction = mixer.clipAction(gltf.animations[1]);
    const WalkAction = mixer.clipAction(gltf.animations[3]);
    IdleAction.play();
    RunAction.play();
    WalkAction.play();
    

    动画动作对象AnimationAction的权重属性.weight可以控制动画的执行,权重为0,对应动画不影响人的动作,权重为1影响程度最大。

    // 跑步和走路动画对人影响程度为0,人处于休闲状态
    IdleAction.weight = 1.0;
    RunAction.weight = 0.0;
    WalkAction.weight = 0.0;
    

    # 切换动画不同动作(.weight)

    点击按钮切换骨骼动画的不同动作。

    const mixer = new THREE.AnimationMixer(gltf.scene);
    const IdleAction = mixer.clipAction(gltf.animations[0]);
    const RunAction = mixer.clipAction(gltf.animations[1]);
    const WalkAction = mixer.clipAction(gltf.animations[3]);
    IdleAction.play();
    RunAction.play();
    WalkAction.play();
    // 跑步和走路动画对人影响程度为0,人处于休闲状态
    IdleAction.weight = 1.0;
    RunAction.weight = 0.0;
    WalkAction.weight = 0.0;
    let ActionState = IdleAction;//标记当前处于播放状态的动画动作对象
    // 通过UI按钮控制,切换动画运动状态
    document.getElementById('Idle').addEventListener('click', function () {
        ActionState.weight = 0.0;//播放状态动画权重设置为0
        IdleAction.weight = 1.0;
        ActionState = IdleAction;
    })
    document.getElementById('Run').addEventListener('click', function () {
        ActionState.weight = 0.0;//播放状态动画权重设置为0
        RunAction.weight = 1.0;
        ActionState = RunAction;
    })
    document.getElementById('Walk').addEventListener('click', function () {
        ActionState.weight = 0.0;//播放状态动画权重设置为0
        WalkAction.weight = 1.0;
        ActionState = WalkAction;
    })
    
    10. 查看外部模型骨骼动画
    1. tweenjs创建threejs动画

    ← 10. 查看外部模型骨骼动画 1. tweenjs创建threejs动画→

    Theme by Vdoing | Copyright © 2016-2025 豫ICP备16004767号-2
    • 跟随系统
    • 浅色模式
    • 深色模式
    • 阅读模式