📅  最后修改于: 2023-12-03 14:59:27.601000             🧑  作者: Mango
BabylonJS是一个强大的3D游戏引擎,提供了许多功能和工具来创建交互式的3D场景。在BabylonJS中,相机是非常重要的组件之一,它决定了场景的视角和观察者的位置。
BabylonJS提供了多种相机类型,每种类型都适用于不同的场景和效果。以下是一些常用的相机类型:
UniversalCamera:用于第一人称和第三人称视角,在游戏中常用。可以旋转、平移和缩放,也可以用于监听触摸和鼠标事件。
// 创建一个UniversalCamera
var camera = new BABYLON.UniversalCamera("Camera", new BABYLON.Vector3(0, 0, -10), scene);
FreeCamera:类似于UniversalCamera,但没有跟随或平滑移动的功能。更适合用于自由漫游和飞行场景。
// 创建一个FreeCamera
var camera = new BABYLON.FreeCamera("Camera", new BABYLON.Vector3(0, 0, -10), scene);
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场景和游戏。