01 babylon.js的动画-基本入门

506 阅读1分钟

基本动画

function createScene() {
  //这里创建场景的基本对象:场景,光,相机
  const scene = new BABYLON.Scene(engine);
        const camera = new BABYLON.ArcRotateCamera(
          "Camera",
          -Math.PI / 2,
          Math.PI / 4,
          10,
          BABYLON.Vector3.Zero()
        );
        camera.attachControl(canvas, true);

        const light = new BABYLON.HemisphericLight(
          "light",
          new BABYLON.Vector3(1, 1, 0)
        );

  //创建一个立方体
  const box = BABYLON.MeshBuilder.CreateBox("box", {});
  box.position.x = 2;
}

创建动画(name,属性,每秒帧数,属性类型,循环模式)

var animationBox = new BABYLON.Animation("myAnimation", "scaling.x", 30, BABYLON.Animation.ANIMATIONTYPE_FLOAT, BABYLON.Animation.ANIMATIONLOOPMODE_CYCLE);

参数1:name

参数2:属性 例如:(position.x)||(scaling.x)

参数3:每秒帧数

参数4:属性类型

  BABYLON.Animation.ANIMATIONTYPE_COLOR3;  【数字】
  BABYLON.Animation.ANIMATIONTYPE_FLOAT; 【二维矢量】
  BABYLON.Animation.ANIMATIONTYPE_MATRIX; 【三维矢量】
  BABYLON.Animation.ANIMATIONTYPE_QUATERNION; 【四元数】
  BABYLON.Animation.ANIMATIONTYPE_VECTOR2;【矩阵】
  BABYLON.Animation.ANIMATIONTYPE_VECTOR3;【颜色】

参数5:循环模式

BABYLON.Animation.ANIMATIONLOOPMODE_CYCLE - 从初始值重新启动动画 BABYLON.Animation.ANIMATIONLOOPMODE_CONSTANT - 在最终值处暂停动画 BABYLON.Animation.ANIMATIONLOOPMODE_RELATIVE - 使用键值渐变重复动画递增

设置关键帧

// 设置关键帧
        const keyFrames = [];
        // 第一个键,第frameRate帧,
        keyFrames.push({
          frame: 0,
          value: 2,
        });
        // 在动画第20帧时
        keyFrames.push({
          frame: frameRate,
          value: -4,
        });
        // 在动画第frameRate * 2帧时
        keyFrames.push({
          frame: 2 * frameRate,
          value: 2,
        });
        // 将动画组添加到动画对象
        xSlide.setKeys(keyFrames);
        // 动画链接到我们的框
        box.animations.push(xSlide);
        // 启动动画
        scene.beginAnimation(box, 0, 2 * frameRate, true);