FlyControls是 Three.js 中的一个控制器,允许用户以飞行模式控制相机。这种控制方式常用于需要在三维空间中自由移动的场景,例如在游戏、虚拟现实应用或建筑可视化中。与FirstPersonControls不同,FlyControls提供了更大的自由度,允许用户在所有方向上移动。
FlyControls 有四个属性一个事件
FlyControls( object : Camera, domElement : HTMLDOMElement ) object: 被控制的摄像机。 domElement: 用于事件监听的HTML元素。(可选) 创建一个新的 FlyControls 实例。
// 设置相机位置
camera.position.set(0, 5, 10); // 从上方观察场景
// 添加一个立方体和地面
const cubeGeometry = new THREE.BoxGeometry(1, 1, 1);
const cubeMaterial = new THREE.MeshBasicMaterial({ color: 0x00ff00 });
const cube = new THREE.Mesh(cubeGeometry, cubeMaterial);
scene.add(cube);
const groundGeometry = new THREE.PlaneGeometry(100, 100);
const groundMaterial = new THREE.MeshBasicMaterial({ color: 0x808080, side: THREE.DoubleSide });
const ground = new THREE.Mesh(groundGeometry, groundMaterial);
ground.rotation.x = - Math.PI / 2; // 旋转使其成为地面
scene.add(ground);
// 设置 FlyControls
const controls = new FlyControls(camera, renderer.domElement);
controls.movementSpeed = 10; // 设置移动速度
controls.domElement = renderer.domElement;
controls.rollSpeed = Math.PI / 12; // 设置旋转速度
controls.autoForward = false; // 不自动向前移动
controls.dragToLook = true; // 鼠标拖动时控制视角
// 监听相机变化
controls.addEventListener('change', () => {
console.log('相机位置:', camera.position);
console.log('相机方向:', camera.getWorldDirection(new THREE.Vector3()));
});
// 动画循环
function animate() {
requestAnimationFrame(animate);
controls.update(0.1); // 更新控制器
renderer.render(scene, camera); // 渲染场景
}
animate();
事件
- change 当摄像机被组件改变时触发。
属性
- autoForward : Boolean 若该值设为 true,初始变换后,摄像机将自动向前移动(且不会停止)。默认为 false。
- dragToLook : Boolean 若该值设为 true,你将只能通过执行拖拽交互来环视四周。默认为 false。 并且可以通过键盘上下左右控制
- movementSpeed : Number 移动速度,默认为 1。
- rollSpeed : Number 旋转速度。默认为 0.005。
FlyControls 与 FirstPersonControls 的区别
FlyControls
主要特性
自由飞行:
允许用户在三维空间中自由飞行,移动方向和速度都可以灵活控制。用户可以前后、左右、上下移动。
鼠标视角控制:
用户通过鼠标拖动来旋转相机,视角变化与相机位置无关,可以进行自由观察。
速度设置:
提供了运动速度和旋转速度的设置,用户可以根据需求调整。
适用场景
探索型应用:
适合用于需要用户在虚拟空间中自由探索的应用,例如虚拟现实、建筑可视化等。
游戏开发:
在需要快速移动和自由观察的游戏中,如飞行模拟器或科幻类游戏,FlyControls 可以提供极好的用户体验。
数据可视化:
用于科学可视化或数据展示时,可以让用户自由浏览复杂的三维数据集。
FirstPersonControls
主要特性
第一人称视角:
模拟第一人称视角的运动,用户的移动方向通常是与相机的朝向一致的,提供了沉浸感。
上下移动限制:
在上下移动时,通常会有一些限制,用户只能在一定的高度范围内移动,这与真实人类的移动方式相似。
键盘和鼠标结合:
用户通过键盘前进、后退、左右移动,同时用鼠标控制视角,提供更自然的第一人称体验。
适用场景
第一人称游戏:
特别适合用于第一人称射击游戏或冒险游戏,用户需要以角色的视角进行移动和观察。
交互式模拟:
在需要模拟真实人类行为的交互式应用中,例如教育应用、训练模拟等。
虚拟现实体验:
在 VR 应用中,当用户需要以第一人称方式与环境互动时,FirstPersonControls 提供了更符合实际的人体运动逻辑。