babylonjs在几个摄像头之间切换

更新时间: 2025-08-19 14:11:40
// camera相关参数
const originAlpha = 2.05  // 初始的摄像头alpha角
const originBeta = 1.4  // 初始的摄像头beta角
const originRadius = 218  // 初始摄像头半径
const cameraTarget = new Vector3(116.15147170914668,-0.5445536148509973,97.83251507258815)  // 摄像头的target
const lowerRadiusLimit = 5 // 最小摄像头半径
const upperRadiusLimit = 376 // 最大摄像头半径
const lowerBetaLimit = 0.1 // 最小beta角
const upperBetaLimit = 1.56 // 最大beta角

let arcCamera,movingCamera  

setCamera()  

function setCamera() {
  arcCamera = new ArcRotateCamera("camera",  originAlpha, originBeta, originRadius, cameraTarget, scene);
  arcCamera.attachControl(canvas, true);
  arcCamera.lowerRadiusLimit = lowerRadiusLimit;  // 最小距离
  arcCamera.upperRadiusLimit = upperRadiusLimit; // 最大距离
  arcCamera.lowerBetaLimit = lowerBetaLimit;      // 最小仰角
  arcCamera.upperBetaLimit = upperBetaLimit; // 最大仰角

  movingCamera = new UniversalCamera("movingCamera", new Vector3(), scene);
  movingCamera.updateUpVectorFromRotation = true;
  movingCamera.rotationQuaternion = new Quaternion();
}

// 切换相机
function switchToArcCamera() {
  scene.activeCamera.detachControl(canvas); // 先解绑当前相机
  scene.activeCamera = arcCamera;
  arcCamera.attachControl(canvas, true);
}

function switchToMovingCamera() {
  scene.activeCamera.detachControl(canvas); // 先解绑当前相机
  scene.activeCamera = movingCamera;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38