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
    目录

    9. 骨骼关节Bone

    # 骨骼关节Bone

    骨骼关节Bone是threejs的一个类,你可以类似人或动物的骨骼关节,来理解骨骼关节Bone对象。

    骨骼关节Bone的作用就是模拟人或动物的关节运动,控制身体表面变形,来生成骨骼动画(可以查看下节课的案例)。

    骨骼关节Bone的父类是Object3D,自然会继承Object3D相关的属性或方法,比如位置属性position、旋转方法rotateX()、添加方法add()...

    # 骨骼关节Bone树结构

    人或动物实际的骨骼关节结构往往是比较复杂的,一般可以用一个层级树结构表达。

    你可以把骨骼关节当做一个模型对象Object3D,构建一个简单的层级模型。

    const Bone1 = new THREE.Bone(); //关节1,用来作为根关节
    const Bone2 = new THREE.Bone(); //关节2
    const Bone3 = new THREE.Bone(); //关节3
    
    // 设置关节父子关系   多个骨头关节构成一个树结构
    Bone1.add(Bone2);
    Bone2.add(Bone3);
    

    # 设置关节模型的位置和姿态角度

    //根关节Bone1默认位置是(0,0,0)
    Bone2.position.y = 60; //Bone2相对父对象Bone1位置
    Bone3.position.y = 30; //Bone3相对父对象Bone2位置
    //平移Bone1,Bone2、Bone3跟着平移
    Bone1.position.set(50,0,50);
    
    // 骨骼关节旋转
    Bone1.rotateX(Math.PI / 6);
    Bone2.rotateX(Math.PI / 6);
    

    # SkeletonHelper可视化骨骼关节

    把所有骨骼关节对象的父对象,也就是根节点骨骼Bone1,添加一个模型对象中作为子对象,然后把模型对象作为SkeletonHelper的参数,就可以看到骨骼关节的可视化效果。

    // 骨骼关节可以和普通网格模型一样作为其他模型子对象,添加到场景中
    const group = new THREE.Group();
    group.add(Bone1);
    
    // SkeletonHelper会可视化参数模型对象所包含的所有骨骼关节
    const skeletonHelper = new THREE.SkeletonHelper(group);
    group.add(skeletonHelper);
    

    注意SkeletonHelper的可视化效果,SkeletonHelper几个线段并不表示Bone,每个Bone你可以理解为一个虚拟关节点,SkeletonHelper几个线段是每个虚拟Bone关节点连线。

    # 拖动条控制骨骼关节旋转

    import {GUI} from 'three/addons/libs/lil-gui.module.min.js';
    const gui = new GUI();
    gui.add(Bone1.rotation, 'x', 0, Math.PI / 3).name('关节1');
    gui.add(Bone2.rotation, 'x', 0, Math.PI / 3).name('关节2');
    
    8. 变形动画(定制人物胖瘦)
    10. 查看外部模型骨骼动画

    ← 8. 变形动画(定制人物胖瘦) 10. 查看外部模型骨骼动画→

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