案例:Three 骨骼模型动画     状态:可编辑再运行    进入竖版
 运行结果 
x
        geometry.skinWeights.push(new THREE.Vector4(1 - (vertex.y - 100) / 20, 0, 0, 0));
 
1
<!DOCTYPE html>
2
<html lang="en">
3
4
<head>
5
  <meta charset="UTF-8">
6
  <title>Three 骨骼模型动画</title>
7
  <style>
8
    body {
9
      margin: 0;
10
      overflow: hidden;
11
      /* 隐藏body窗口区域滚动条 */
12
    }
13
  </style>
14
  <script src="/js/threejs/threer92.js"></script>
15
  <script src="/example/threejs/solarsystem/files/OrbitControls.js"></script>
16
</head>
17
    
18
<body>
19
  <script>
20
    /**
21
     * 创建场景对象Scene
22
     */
23
    var scene = new THREE.Scene();
24
    /**
25
     * 创建骨骼网格模型SkinnedMesh
26
     */
27
    // 创建一个圆柱几何体,高度120,顶点坐标y分量范围[-60,60]
28
    var geometry = new THREE.CylinderGeometry(5, 10, 120, 50, 300);
29
    geometry.translate(0, 60, 0); //平移后,y分量范围[0,120]
30
    console.log("name", geometry.vertices); //控制台查看顶点坐标
31
    //
32
    /**
33
     * 设置几何体对象Geometry的蒙皮索引skinIndices、权重skinWeights属性
34
     * 实现一个模拟腿部骨骼运动的效果
35
     */
36
    //遍历几何体顶点,为每一个顶点设置蒙皮索引、权重属性
37
    //根据y来分段,0~60一段、60~100一段、100~120一段
38
    for (var i = 0; i < geometry.vertices.length; i++) {
39
      var vertex = geometry.vertices[i]; //第i个顶点
40
      if (vertex.y <= 60) {
41
        // 设置每个顶点蒙皮索引属性  受根关节Bone1影响
42
        geometry.skinIndices.push(new THREE.Vector4(0, 0, 0, 0));
43
        // 设置每个顶点蒙皮权重属性
44
        // 影响该顶点关节Bone1对应权重是1-vertex.y/60
45
        geometry.skinWeights.push(new THREE.Vector4(1 - vertex.y / 60, 0, 0, 0));
46
      } else if (60 < vertex.y && vertex.y <= 60 + 40) {
47
        // Vector4(1, 0, 0, 0)表示对应顶点受关节Bone2影响
48
        geometry.skinIndices.push(new THREE.Vector4(1, 0, 0, 0));