在 Babylon.js 中使用 Gizmo:交互式 3D 操作工具

news/2025/1/21 22:06:27/

        在 3D 应用程序中,交互式操作对象(如平移、旋转、缩放)是一个常见的需求。Babylon.js 提供了一个强大的工具——Gizmo,用于在 3D 场景中实现这些功能。本文将介绍如何在 Babylon.js 中使用 Gizmo,并展示如何通过代码实现交互式操作。

什么是 Gizmo?

        Gizmo 是 Babylon.js 中的一种可视化工具,允许用户通过鼠标或触摸屏与 3D 对象进行交互。它通常用于编辑器或需要精细控制对象位置的应用程序中。Gizmo 的主要功能包括:
平移(PositionGizmo):移动对象的位置。

  • 旋转(RotationGizmo):旋转对象。
  • 缩放(ScaleGizmo):缩放对象的大小。
  • 边界框(BoundingBoxGizmo):显示对象的边界框,并支持整体操作。

 如何使用 Gizmo

        以下是如何在 Babylon.js 中使用 Gizmo 的基本步骤。

 1. 引入 Gizmo 模块

        首先,确保引入了 Babylon.js 的 Gizmo 模块:

import * as BABYLON from "@babylonjs/core";
import "@babylonjs/core/Gizmos/gizmoManager"; // 引入 Gizmo 模块

 2. 创建 GizmoManager

        `GizmoManager` 是管理 Gizmo 的核心类。通过它,你可以启用或禁用不同类型的 Gizmo。

const gizmoManager = new BABYLON.GizmoManager(scene);

3. 启用 Gizmo

        通过 `GizmoManager`,你可以为选中的对象启用平移、旋转或缩放 Gizmo。

// 启用平移 Gizmo
gizmoManager.positionGizmoEnabled = true;// 启用旋转 Gizmo
gizmoManager.rotationGizmoEnabled = true;// 启用缩放 Gizmo
gizmoManager.scaleGizmoEnabled = true;// 启用边界框 Gizmo
gizmoManager.boundingBoxGizmoEnabled = true;

4. 设置选中的对象

        通过 `GizmoManager` 的 `attachToMesh()` 方法,将 Gizmo 附加到指定的对象上:

const box = BABYLON.MeshBuilder.CreateBox("box", { size: 2 }, scene);
gizmoManager.attachToMesh(box); // 将 Gizmo 附加到 box 上

完整示例代码

        以下是一个完整的示例,展示如何在 Babylon.js 中使用 Gizmo:```javascript

// 创建 Babylon.js 引擎和场景
const canvas = document.getElementById("renderCanvas");
const engine = new BABYLON.Engine(canvas, true);
const scene = new BABYLON.Scene(engine);// 创建摄像机
const camera = new BABYLON.ArcRotateCamera("camera", Math.PI / 2, Math.PI / 4, 10, BABYLON.Vector3.Zero(), scene);
camera.attachControl(canvas, true);// 创建光源
const light = new BABYLON.HemisphericLight("light", new BABYLON.Vector3(1, 1, 0), scene);// 创建一个立方体
const box = BABYLON.MeshBuilder.CreateBox("box", { size: 2 }, scene);// 创建 GizmoManager
const gizmoManager = new BABYLON.GizmoManager(scene);// 启用平移、旋转和缩放 Gizmo
gizmoManager.positionGizmoEnabled = true;
gizmoManager.rotationGizmoEnabled = true;
gizmoManager.scaleGizmoEnabled = true;// 将 Gizmo 附加到立方体上
gizmoManager.attachToMesh(box);// 渲染循环
engine.runRenderLoop(() => {scene.render();
});// 窗口大小调整事件
window.addEventListener("resize", () => {engine.resize();
});

画面效果参考:

Gizmo 的高级功能

1. 自定义 Gizmo 的外观

        你可以通过修改 Gizmo 的材质、颜色或大小来自定义其外观。例如:

gizmoManager.gizmos.positionGizmo.updateGizmoRotationToMatchAttachedMesh = false;
gizmoManager.gizmos.positionGizmo.xGizmo.dragBehavior.dragDeltaRatio = 2; // 调整灵敏度

2. 限制 Gizmo 的操作

        你可以限制 Gizmo 的操作范围或方向。例如,只允许在 X 轴上平移:

gizmoManager.gizmos.positionGizmo.xGizmo.isEnabled = true;
gizmoManager.gizmos.positionGizmo.yGizmo.isEnabled = false;
gizmoManager.gizmos.positionGizmo.zGizmo.isEnabled = false;

3. 使用边界框 Gizmo

边界框 Gizmo 可以显示对象的边界框,并支持整体操作:

gizmoManager.boundingBoxGizmoEnabled = true;

总结

  • Gizmo是 Babylon.js 中用于交互式操作 3D 对象的工具。
  • 通过 `GizmoManager`,你可以轻松启用平移、旋转、缩放和边界框 Gizmo。
  • 你可以自定义 Gizmo 的外观和行为,以满足特定需求。

http://www.ppmy.cn/news/1565059.html

相关文章

论文阅读笔记:AI+RPA

文章目录 论文题目下载地址论文摘要 论文题目 Challenges and opportunities: Implementing RPA and AI in fraud detection in the banking sector 下载地址 点击这里下载 论文摘要 在银行业中,将机器人流程自动化(RPA)和人工智能&…

每打开一个chrome页面都会【自动打开F12开发者模式】,原因是 使用HBuilderX会影响谷歌浏览器的浏览模式

打开 HBuilderX,点击 运行 -> 运行到浏览器 -> 设置web服务器 -> 添加chrome浏览器安装路径 chrome谷歌浏览器插件 B站视频下载助手插件: 参考地址:Chrome插件 - B站下载助手(轻松下载bilibili哔哩哔哩视频&#xff09…

万物互联的背后:MCU嵌入式硬件的奇幻之旅

文章背景:嵌入式硬件是什么? 你可能听说过嵌入式硬件,却总觉得它像是实验室里神秘的玩意儿。其实,它就在我们身边——从你手上的智能手表到车里的倒车雷达,无一不是嵌入式硬件的“杰作”。想象一块小小的电路板&#x…

EtherCAT PDO映射概述

文章目录 前言一、PDO映射相关概念介绍二、PDO映射配置过程详解 前言 当主站使用EtherCAT协议传输过程数据来控制从站设备时,会疑问主站是在什么时候告诉从站要传输什么过程数据的? 答案是,在PDO映射阶段完成的。 PDO映射简单来说就是通过…

Spark期末复习题库

一、填空 1. Spark Web监控页面的端口地址是_______localhost:4040__________ 2. 在Spark安装目录下的conf目录中,修改名为_log4j.properties__配置文件,可以避免Spark程序在运行时输出过多的信息 3. 启动基于Python的Spark交互式命令行的命令是_____…

【AI工具学习14】利用文生类AI工具实现角色扮演对话1

目录 1.AI解困师 2.AI男友 3.星座大师 4.法律顾问 市面上有不少文生类 AI 工具可供选择,像 ChatGPT、文心一言、讯飞星火等。要根据自己的需求以及工具的特点来挑选,比如有的在创意写作方面表现出色,有的在逻辑回复上更胜一筹&#xff0c…

《AI语言模型的关键技术探析:系统提示、评估方法与提示工程》

文章主要内容摘要 1. 系统提示(System Prompt) 定义: 用于设置模型行为、角色和工作方式的特殊指令重要性: 定义模型行为边界影响输出质量和一致性可将通用模型定制为特定领域助手 挑战: 技术集成复杂兼容性问题效果难以精确预测 2. 模型评估方法 创新方向: 自一致性(Self…

Linux 管道操作

Linux 管道操作 在 Linux 中,管道(Pipe)是一个非常强大且常用的功能,它允许将一个命令的输出直接传递给另一个命令作为输入,从而能够高效地处理和分析数据。管道在多个命令之间建立数据流,减少了文件的读写…