Babylon.js手记:使用鼠标中键控制ArcRotateCamera平移

在 Babylon.js 中,ArcRotateCamera 默认使用鼠标右键进行平移操作。但在某些情况下,我们可能希望使用鼠标中键来实现平移功能。本文将详细介绍如何正确配置 ArcRotateCamera 以实现鼠标中键平移。

解决方案

经过验证,以下是实现鼠标中键平移的正确代码:

TypeScript 复制代码
// 创建 ArcRotateCamera
camera = new BABYLON.ArcRotateCamera(
    "Camera", 
    camAlpha, 
    camBeta, 
    camRadius, 
    posTarget.clone(), 
    scene);

// 关键配置:启用鼠标中键平移
camera.attachControl(true, false, 1);

// 其他相机设置
camera.fov = Math.PI * 0.12;
camera.panningAxis = new BABYLON.Vector3(1, 0, 1); // 禁用Y轴平移 
camera.panningSensibility = 5000 / camera.radius;

关键参数详解

attachControl 方法参数

attachControl 方法有多个重载,目前我使用重载的完整签名如下:

TypeScript 复制代码
attachControl(noPreventDefault: boolean, useCtrlForPanning: boolean, panningMouseButton: number): void;

各参数含义:

  1. noPreventDefault (true)

    • 设置为 true 时,不会阻止浏览器默认行为

    • 设置为 false 时,会阻止浏览器默认行为(如右键菜单)

  2. useCtrlForPanning (false)

    • 设置为 true 时,需要按住 Ctrl 键配合鼠标左键进行平移

    • 设置为 false 时,直接使用指定鼠标按钮进行平移

  3. panningMouseButton (1)

    • 0 = 鼠标左键

    • 1 = 鼠标中键

    • 2 = 鼠标右键

其他重要配置

  • panningAxis: 限制平移的轴向

    • new BABYLON.Vector3(1, 0, 1) 表示允许 X 和 Z 轴平移,禁用 Y 轴平移

    • new BABYLON.Vector3(1, 1, 1) 表示允许所有轴向平移

  • panningSensibility: 平移灵敏度

    • 值越大,平移速度越慢

    • 可以设置为固定值,或根据相机半径动态调整

完整的控制方案

配置后的相机控制行为:

  • 鼠标左键拖动: 旋转相机

  • 鼠标中键拖动: 平移相机

  • 鼠标滚轮: 缩放相机

注意事项

  1. 确保在调用 attachControl 之前相机已被正确创建

  2. 如果需要禁用 Y 轴平移,务必设置 panningAxis 属性

  3. 平移灵敏度可以根据具体场景需求进行调整

  4. 如果遇到平移不灵敏的问题,可以适当减小 panningSensibility 的值

相关推荐
ttod_qzstudio2 个月前
Babylon 编辑器快捷键小记
编辑器·babylonjs
哈哈哈嗝哈哈哈1 年前
基于babylonjs的小游戏 跳一跳
babylonjs
arwind gao1 年前
BabylonJS 6.0文档 Deep Dive 动画(四):通过动画排序制作卡通片
前端·javascript·webgl·babylonjs·babylon.js
webgl_谷子2 年前
babylonsjs入门-基础模版
javascript·webgl·web3d·babylonjs·babylonjs入门·babylonjs模版·babylonjs镜面效果
arwind gao2 年前
BabylonJS 6.0文档 Deep Dive 摄像机(六):遮罩层和多相机纹理
3d·webgl·webgpu·babylonjs·babylon.js