首页 / 模块目录 / 角色 / 载具运动 / AirplaneModelController

AirplaneModelController

three

把飞行运动状态应用到飞机视觉变换(位置、偏航、俯仰、翻滚)。

类别角色 / 载具运动
依赖档位three
内部依赖WorldBasis
相关模块
演示场flight · 飞行 ↓
只取这个模块
modules/actor-motion/aircraft/AirplaneModelController.js

连同其内部依赖一并复制,保留相对目录结构。

飞行

three

自动驾驶——或点击后用方向键操控,空格加力。

源码

import { Matrix4 } from 'three';
import { DEFAULT_WORLD_BASIS } from '../../math/WorldBasis.js';

export class AirplaneModelController {
  constructor(planeModel = null, jetFlames = [], basis = DEFAULT_WORLD_BASIS) {
    this.planeModel = planeModel;
    this.jetFlames = jetFlames;
    this.basis = basis;

    this.modelMatrix = new Matrix4();
  }

  reset() {
    if (!this.planeModel) return;
    this.planeModel.position.set(0, 0, 0);
    this.planeModel.quaternion.identity();
  }

  step({
    position,
    yaw,
    pitch,
    roll,
    throttle,
    isBoosting,
    elapsedTimeSeconds,
    deltaSeconds = 1 / 60
  }) {
    if (!this.planeModel) return;

    this.planeModel.position.set(position.x, position.y, position.z);

    const frame = this.basis.yawPitchRollFrame(yaw, pitch, roll);
    this.modelMatrix.makeBasis(frame.right, frame.up, frame.back ?? frame.forward.clone().negate());
    this.planeModel.quaternion.setFromRotationMatrix(this.modelMatrix);

    for (const flame of this.jetFlames) {
      flame.step({
        throttle,
        isBoosting,
        timeSeconds: elapsedTimeSeconds,
        deltaSeconds
      });
    }
  }
}