📜  BabylonJS-相机(1)

📅  最后修改于: 2023-12-03 14:59:27.601000             🧑  作者: Mango

BabylonJS-相机介绍
简介

BabylonJS是一个强大的3D游戏引擎,提供了许多功能和工具来创建交互式的3D场景。在BabylonJS中,相机是非常重要的组件之一,它决定了场景的视角和观察者的位置。

常见相机类型

BabylonJS提供了多种相机类型,每种类型都适用于不同的场景和效果。以下是一些常用的相机类型:

  1. UniversalCamera:用于第一人称和第三人称视角,在游戏中常用。可以旋转、平移和缩放,也可以用于监听触摸和鼠标事件。

    // 创建一个UniversalCamera
    var camera = new BABYLON.UniversalCamera("Camera", new BABYLON.Vector3(0, 0, -10), scene);
    
  2. FreeCamera:类似于UniversalCamera,但没有跟随或平滑移动的功能。更适合用于自由漫游和飞行场景。

    // 创建一个FreeCamera
    var camera = new BABYLON.FreeCamera("Camera", new BABYLON.Vector3(0, 0, -10), scene);
    
  3. ArcRotateCamera:用于创建使用鼠标控制旋转的相机。常用于产品展示和虚拟旅游场景。

    // 创建一个ArcRotateCamera
    var camera = new BABYLON.ArcRotateCamera("Camera", Math.PI / 2, Math.PI / 4, 5, new BABYLON.Vector3.Zero(), scene);
    
相机属性和方法

BabylonJS的相机具有许多属性和方法,用于控制其行为和视角。以下是一些常用的属性和方法:

  • position:相机的位置(世界坐标)
  • target:相机观察的目标位置(世界坐标)
  • rotation:相机的旋转角度
  • fov:相机的视野角度
  • mode:相机的模式(Perspective、Orthographic等)
  • attachControl(canvas, noPreventDefault?):将相机与画布关联,并绑定鼠标和触摸事件
  • detachControl(canvas):解绑相机与画布的关联,停止监听鼠标和触摸事件
示例代码片段

以下是一个使用ArcRotateCamera创建相机的示例代码片段:

const canvas = document.getElementById("renderCanvas") as HTMLCanvasElement;
const engine = new BABYLON.Engine(canvas, true);
const scene = new BABYLON.Scene(engine);

// 创建一个ArcRotateCamera
const camera = new BABYLON.ArcRotateCamera("Camera", Math.PI / 2, Math.PI / 4, 5, new BABYLON.Vector3.Zero(), scene);

// 设置相机的视角和目标位置
camera.setPosition(new BABYLON.Vector3(0, 10, -10));
camera.setTarget(BABYLON.Vector3.Zero());

// 绑定相机与画布
camera.attachControl(canvas, true);

// 渲染场景
engine.runRenderLoop(() => {
    scene.render();
});

以上代码创建了一个ArcRotateCamera,并将其与一个HTML画布关联。相机的位置设置为(0, 10, -10),观察目标设置为原点。相机随后被绑定到画布上,开始监听鼠标和触摸事件。最后,引擎进入渲染循环,将场景渲染到画布上。

结论

BabylonJS的相机功能强大,并且非常易于使用。通过选择合适的相机类型,设置相机的属性和方法,开发者可以创建出令人惊叹的3D场景和游戏。