three FlyControls 飞行控制器

317 阅读3分钟

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 的区别

1730683394967.png

 FlyControls
    主要特性
        自由飞行:
        允许用户在三维空间中自由飞行,移动方向和速度都可以灵活控制。用户可以前后、左右、上下移动。
        鼠标视角控制:
        用户通过鼠标拖动来旋转相机,视角变化与相机位置无关,可以进行自由观察。
        速度设置:
        提供了运动速度和旋转速度的设置,用户可以根据需求调整。
    适用场景
        探索型应用:
        适合用于需要用户在虚拟空间中自由探索的应用,例如虚拟现实、建筑可视化等。
        游戏开发:
        在需要快速移动和自由观察的游戏中,如飞行模拟器或科幻类游戏,FlyControls 可以提供极好的用户体验。
        数据可视化:
        用于科学可视化或数据展示时,可以让用户自由浏览复杂的三维数据集。
        
FirstPersonControls
    主要特性
        第一人称视角:
        模拟第一人称视角的运动,用户的移动方向通常是与相机的朝向一致的,提供了沉浸感。
        上下移动限制:
        在上下移动时,通常会有一些限制,用户只能在一定的高度范围内移动,这与真实人类的移动方式相似。
        键盘和鼠标结合:
        用户通过键盘前进、后退、左右移动,同时用鼠标控制视角,提供更自然的第一人称体验。
    适用场景
        第一人称游戏:
        特别适合用于第一人称射击游戏或冒险游戏,用户需要以角色的视角进行移动和观察。
        交互式模拟:
        在需要模拟真实人类行为的交互式应用中,例如教育应用、训练模拟等。
        虚拟现实体验:
        在 VR 应用中,当用户需要以第一人称方式与环境互动时,FirstPersonControls 提供了更符合实际的人体运动逻辑。