Babylon.js 7.0开发入门教程

Babylon.js 是一个功能强大的开源 3D 引擎,能够使用 JavaScript 渲染交互式 3D 和 2D 图形。它是为 Web 甚至 VR 创建游戏、演示、可视化和其他 3D 应用程序的绝佳选择。Babylon.js最新版本是7.0。

Babylon.js 是免费、开源和跨平台的,是 Unity 和 Unreal Engine 等专有 3D 引擎的绝佳替代品。它也是 Three.js 和 PlayCanvas 等其他开源 3D 引擎的绝佳替代品,因为它提供开箱即用的 TypeScript 类型,针对性能进行了优化,并提供了高级调试工具。它的开发人员体验非常出色,并且拥有庞大且活跃的社区,这使其成为初学者和专家创建 Web 3D 应用程序的绝佳选择。

NSDT工具推荐: Three.js AI纹理开发包 - YOLO合成数据生成器 - GLTF/GLB在线编辑 - 3D模型格式在线转换 - 可编程3D场景编辑器 - REVIT导出3D模型插件 - 3D模型语义搜索引擎 - Three.js虚拟轴心开发包 - 3D模型在线减面 - STL模型在线切割 

1、Babylon.js开发入门

Babylon.js 支持 ES6 和 CommonJS 模块导入:

  • CommonJS Babylon.js npm 包支持 CommonJS/ES6 导入、UMD 和 AMD 导入​​
  • 对于通过 Tree Shaking 寻求优化的开发人员,Babylon.js 提供了 ES6 软件包。其中包括用于核心功能的 @babylonjs/core,以及 @babylonjs/materials、 @babylonjs/loaders、 @babylonjs/gui 等附加模块。重要的是不要混合 ES6 和遗留包​​

如果你想使用 CommonJS 模块导入,你可以安装 Babylon.js,如下所示:

npm install --save babylonjs

然后,将其包含在你的 JavaScript 或 TypeScript 文件中:

import * as BABYLON from "babylonjs";

如果你想使用 ES6 模块导入,可以安装 Babylon.js,如下所示:

npm install --save @babylonjs/core

然后,将其包含在你的 JavaScript 或 TypeScript 文件中:

import { Engine, Scene } from "@babylonjs/core";

我更喜欢 ES6 模块导入,因为它们允许进行树摇动,这可以显着减少最终包的大小。但是,在本教程中,我将使用 CommonJS 模块导入,因为 Babylon.js 游乐场使用的是 CommonJS 模块导入。

2、创建第一个Babylon.js 场景

Babylon.js Playground (游乐场)是学习和开发 Babylon.js 的必备工具。这是一个用户友好的环境,你可以在其中编写代码并立即在实时场景中查看结果。游乐场配有默认场景,尝试它是一个很好的开始方式。

除了使用默认场景之外,如果想查看特定功能的示例,你还可以搜索游乐场。例如,如果你搜索“物理学”,会发现几个实际应用中的物理学示例。

游乐场还经常用于在寻求帮助和帮助他人时在 Babylon.js 论坛上分享代码片段。我经常发现自己在谷歌上搜索特定的 Babylon.js 问题或功能,并找到一个游乐场示例来帮助我理解和解决我的问题。

2.1 创建和修改网格

网格是 3D 图形的基础。在 Babylon.js 中,创建基本网格(如球体)涉及几行代码:

var sphere = BABYLON.MeshBuilder.CreateSphere(
  "sphere",
  { diameter: 2, segments: 32 },
  scene
);
sphere.position.y = 1;

你还可以创建材质并将其分配给网格以更改其外观。例如,要将地平面设为红色,你可以编写:

const groundMaterial = new BABYLON.StandardMaterial("Ground Material", scene);
groundMaterial.diffuseColor = BABYLON.Color3.Red();
ground.material = groundMaterial;

纹理也可以添加到材质中:

var groundTexture = new BABYLON.Texture(
  Assets.textures.checkerboard_basecolor_png.rootUrl,
  scene
);
groundMaterial.diffuseTexture = groundTexture;

2.2 导入和使用网格

Babylon.js 允许导入复杂的网格,可以在场景中缩放和定位:

BABYLON.SceneLoader.ImportMesh(
  "",
  Assets.meshes.MyCustomMesh.rootUrl,
  Assets.meshes.MyCustomMesh.filename,
  scene,
  function (newMeshes) {
    newMeshes[0].scaling = new BABYLON.Vector3(0.1, 0.1, 0.1);
  }
);

2.3 使场景具有互动性

交互性是网络体验的一个关键方面。将控件附加到相机可以通过单击和拖动操作进行用户交互。

var camera = new BABYLON.ArcRotateCamera(
  "Camera",
  0,
  0,
  10,
  BABYLON.Vector3.Zero(),
  scene
);
camera.attachControl(canvas, true);

2.4 添加虚拟现实支持

虚拟现实是一项令人兴奋的新技术,可以让用户更加身临其境地体验 3D 环境。 Babylon.js 内置了对虚拟现实的支持,只需几行代码即可启用:

const experience = await scene.createDefaultXRExperienceAsync();
const camera = experience.baseExperience.camera;
camera.attachControl(true);

你只需创建 XR 体验,从基础体验中获取相机,并将其附加到画布上,你就应该为 VR 做好准备。如果没有 VR 耳机,你仍然可以使用沉浸式 Web 模拟器 Chrome 扩展程序在 VR 中测试场景。

2.5 添加物理

物理是许多 3D 应用的重要组成部分。 Babylon.js 有一个内置的物理引擎,可以通过几行代码启用:

var gravityVector = new BABYLON.Vector3(0, -9.81, 0);
var physicsPlugin = new BABYLON.CannonJSPlugin();
scene.enablePhysics(gravityVector, physicsPlugin);

可以通过设置网格的 physicsImpostor属性将物理应用于网格:

sphere.physicsImpostor = new BABYLON.PhysicsImpostor(
  sphere,
  BABYLON.PhysicsImpostor.SphereImpostor,
  { mass: 1, restitution: 0.9 },
  scene
);

2.6 添加灯光

灯光对于创建逼真的场景至关重要。在 Babylon.js 中,有四种主要类型的灯光,每种类型都提供独特的属性和效果:

  • 定向光:模仿阳光,在整个场景中发出平行光线。它由方向向量定义并且具有无限范围。
  • 点光:类似于灯泡,从空间中的单个点向各个方向均匀地辐射光。
  • 聚光灯:功能类似于手电筒,从给定方向的特定位置发出锥形光束。其照明面积和衰减由角度和指数参数控制。
  • 半球光:模拟周围环境照明,由方向定义,通常向上。其效果受设置不同颜色属性的影响。

每种灯光类型都可以使用强度和范围等属性进行自定义,并且可以控制它们照亮哪些网格。对于更复杂的光照场景,可以利用光照贴图来预先计算和存储光照效果。

例如,要向场景添加定向光,可以编写:

var light = new BABYLON.DirectionalLight(
  "DirectionalLight",
  new BABYLON.Vector3(0, -1, 0),
  scene
);

2.7 添加阴影

阴影是创建真实场景的重要组成部分,因为它们可以提供有关对象相对位置和距离的线索,从而增强深度和维度的感知,从而帮助传达场景的 3D 结构。 Babylon.js 有多种类型的阴影,包括 PCF、PCFSoft 和 PCSS。例如,要将 PCF 阴影添加到场景中,您可以编写:

var shadowGenerator = new BABYLON.ShadowGenerator(1024, light);
shadowGenerator.usePoissonSampling = true;
shadowGenerator.bias = 0.0001;
shadowGenerator.normalBias = 0.01;
shadowGenerator.setDarkness(0.5);
shadowGenerator.useBlurExponentialShadowMap = true;
shadowGenerator.blurKernel = 32;
shadowGenerator.blurScale = 2;
shadowGenerator.blurBoxOffset = 1;
shadowGenerator.useKernelBlur = true;

shadowGenerator.addShadowCaster(sphere);

2.8 添加音频

音频是许多 3D 应用程序的重要组成部分。 Babylon.js 有一个内置的音频引擎,可以通过几行代码启用:

var audioEngine = new BABYLON.AudioEngine();

可以通过创建声音对象将音频添加到场景中:

var sound = new BABYLON.Sound(
  "Sound",
  `${Assets.sound.cannonBlast.rootUrl}${Assets.sound.cannonBlast.filename}`,
  scene,
  null,
  { loop: true, autoplay: true }
);

这个特定的示例将在场景中循环播放“炮弹爆炸”声音。大炮爆炸资源已预加载到 Babylon.js 游乐场中。如果您要在应用程序中加载自定义资源,您只需提供一个指向文件系统上的声音文件的 URL。有关更多详细信息,您可以查看有关 Babylon.js 中播放声音的文档。

2.9 添加用户界面元素

用户界面元素可用于向场景添加交互性。 Babylon.js 提供了一个构建在 DynamicTexture 之上的 GUI 库扩展。

例如,要将一个对话框添加到包含按钮的场景中,可以编写:

var guiManager = new BABYLON.GUI.GUI3DManager(scene);

const slate = new BABYLON.GUI.HolographicSlate("down");
slate.minDimensions = new BABYLON.Vector2(5, 5);
slate.dimensions = new BABYLON.Vector2(5, 5);
slate.titleBarHeight = 0.75;
slate.title = "Button!";
guiManager.addControl(slate);

var button = BABYLON.GUI.Button.CreateSimpleButton("button", "Click me!");
button.width = 0.5;
button.height = 0.25;
button.background = "green";
button.textBlock.color = "white";
button.onPointerClickObservable.add(() => {
  alert("Hi!");
});

slate.content = button;
slate.position = new BABYLON.Vector3(-2, 2, 0);

要使用 ES6 版本,你需要安装 @babylonjs/gui 包:

npm install --save @babylonjs/gui

然后,将其导入 JavaScript 或 TypeScript 文件,如下所示:

import { GUI3DManager, HolographicSlate, Button } from "@babylonjs/gui";
提示:如果你不喜欢允许用户倾斜 HolographicSlate 的控件,可以在将石板添加到场景后,通过设置  slate._gizmo._rootMesh.setEnabled(false); 来禁用它们。

2.10 添加动画

动画可用于向场景添加运动。 Babylon.js 有多种类型的动画,包括关键帧、骨骼和变形目标。

例如,要将关键帧动画添加到场景中,可以编写:

var animationBox = new BABYLON.Animation(
  "myAnimation",
  "scaling.x",
  30,
  BABYLON.Animation.ANIMATIONTYPE_FLOAT,
  BABYLON.Animation.ANIMATIONLOOPMODE_CYCLE
);
var keys = [];
keys.push({
  frame: 0,
  value: 1,
});
keys.push({
  frame: 20,
  value: 0.2,
});
keys.push({
  frame: 100,
  value: 1,
});
animationBox.setKeys(keys);
sphere.animations.push(animationBox);
scene.beginAnimation(sphere, 0, 100, true);

以下是该代码的作用的解释:

动画创建。

创建一个名为“myAnimation”的 BABYLON.Animation 对象来为 scaling.x 属性设置动画,表明动画将影响对象的宽度。它以每秒 30 帧的速度运行,值表示为浮点数,并连续循环。

定义关键帧。

定义了三个关键帧:

  • 在第 0 帧,比例为 1(原始尺寸)。
  • 在第 20 帧,比例减小到 0.2。
  • 在第 100 帧处,比例返回到 1。
应用和启动动画。

动画被分配给球体对象并立即开始,在第 0 帧和第 100 帧之间循环。这会在球体的宽度上创建脉动效果。

要更深入地了解动画,可以查看 Babylon.js 动画文档。

2.11 调试

调试是任何开发过程的重要组成部分。 Babylon.js 有一个内置的调试层,可以通过几行代码启用:

scene.debugLayer.show();

调试层提供了一个用户友好的界面,用于检查和修改场景。它还可以向你显示当前的帧速率和其他性能指标,并允许你导出性能数据。

如果使用 ES6 模块导入,则需要安装 @babylonjs/inspector 包:

npm install --save @babylonjs/inspector

然后,将其导入 JavaScript 或 TypeScript 文件,如下所示:

import "@babylonjs/inspector";

2.12 托管和共享你的场景

一旦你对自己的创作感到满意,可以将其下载为 HTML 文件并将其托管在 GitHub Pages 等平台上,以便全世界都可以访问。

你还可以通过Playground URL 与其他人分享你的场景。例如,默认场景的 URL 为 :https://playground.babylonjs.com/#6QY4X1#1 。

如果想将场景与你选择的框架集成,可以查看 Babylon.js 外部库文档,其中可以找到 Babylon.js 与 React、Vue 或 Ionic Angular 等框架一起使用的示例。

3、结束语

Babylon.js 是一个功能强大的开源 3D 引擎,能够使用 JavaScript 渲染交互式 3D 和 2D 图形。它得到了良好的支持和维护,通过许多交互式游乐场示例和支持性社区论坛提供了良好的开发人员体验,使其成为创建游戏、演示、可视化和其他网络 3D 应用程序(最终甚至是本机平台)的绝佳选择。


原文链接:Babylon.js 7.0 开发入门 - BimAnt

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/597748.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

超实用|新能源汽车充电小程序开发,一键充电很简单!

随着城市化的加速,新能源汽车用户越来越多。由于电池容量和充电时间的限制,新能源汽车用户通常需要在城市各处寻找充电站,充电过程不仅需要耗费时间,而且对于新能源汽车用户而言,充电站的位置分布是否合理、充电设施的…

当下大模型的趋势以及如何让学习大模型?

当下大模型的趋势 近年来,随着计算能力的提升、数据量的增加以及算法的进步,大模型在人工智能领域展现出了显著的发展趋势。以下是截至2024,大模型发展的一些关键趋势: 参数规模持续增长:从OpenAI的GPT-3的1750亿参数…

如何使用 iOS系统恢复软件修复 iPhone 问题

苹果公司向世界推出了他们可以拥有的最智能的手机。但即使是 iPhone 也无法避免智能手机常见的损坏和问题。您将熟悉最常见的问题。屏幕黑屏或卡在 Apple 徽标上;冻结或卡在恢复模式的 iPhone。但这样的问题不胜枚举,每天都有 iOS 用户在他们的设备中遇到…

第八篇:深入探索操作系统架构:从基础到前沿

深入探索操作系统架构:从基础到前沿 1 引言 在当今这个高速发展的数字时代,操作系统无疑是计算机科学领域的基石之一。它不仅是计算机硬件与最终用户之间的桥梁,更是实现高效计算和资源管理的关键。操作系统的架构,即其内部结构和…

Elasticsearch:理解人工智能相似性搜索

理解相似性搜索(也称为语义搜索)的指南,这是人工智能最新阶段的关键发现之一。 最新阶段人工智能的关键发现之一是根据相似性搜索和查找文档的能力。相似性搜索是一种比较信息的方法,其基于含义而非关键字。 相似性搜索也被称为语…

springboot+vue+elementui实现校园互助平台大作业、毕业设计

目录 一、项目介绍 二、项目截图 管理后台 1.登录(默认管理员账号密码均为:admin) 2. 用户管理 ​编辑 3.任务管理 互助单(学生发布) 行政单(教师发布) ​编辑 审核(退回需…

如何完美解决Outlook大文件传送问题,提升办公协作效率?

在日常工作中,邮件是一种常用的通信方式,经常用来发送各类文件,比如报告和文档、合同和协议、财务报表、营销资料、设计文件等。但有时文件会比较大,因此Outlook大文件传送时,会遇到附件大小受限的情况。常用的解决发送…

五分钟了解等级保护、风险评估和安全测评三者的区别和联系?

等级保护 基本概念:网络安全等级保护是指对国家秘密信息、法人和其他组织和公民的专有信息以及公开信息和存储、传输、处理这些信息的信息系统分等级实行安全保护,对信息系统中使用的安全产品实行按等级管理,对信息系统中发生的信息安全事件…

已解决SyntaxError: EOL while scanning string literal 亲测有效!!!

已解决SyntaxError: EOL while scanning string literal 亲测有效!!! 亲测有效 报错问题解决思路解决方法 报错问题 SyntaxError: EOL while scanning string literal 这个错误通常发生在Python代码中,表示字符串字面量没有被正确…

打开深度学习的锁:(0)什么是神经网络?有哪些必备的知识点准备?

PS:每每温故必而知新 什么是神经网络? 一、一个单神经元的神经网络二、多个单神经元的神经网络三、到底什么是机器学习?(重点)1:什么是机器学习的训练?2:什么是模型?权重…

让网络分析更简单高效 - AnaTraf网络流量分析仪

随着互联网的迅速发展,网络流量分析已经成为IT运维人员不可或缺的重要工具。作为网络性能监测与诊断(NPMD)领域的佼佼者,AnaTraf网络流量分析仪凭借其出色的性能和易用性,正在快速占领市场。本文将为您深入解读AnaTraf,让您了解它是如何帮助企业高效管理网络的。 全流量回溯分…

苏州金龙荣获首届无人扫地机器人演示比赛“竞技领跑奖”

4月30日,2024年苏州市首届无人扫地机器人演示比赛在高新区思益街展开比拼。五家企业参赛在道路上实地比拼无人扫地机器人技术,通过清扫垃圾、识别路障等环节展现城市清洁的“未来场景”。经过角逐,苏州金龙的无人驾驶清扫车获得步道演示比赛“…

老旧房屋用电线路故障引起的电气火灾预防对策​

摘 要:在我国新农村建设方针指引下,农村地区的发展水平有了显著提高。在农村经济发展中,我们也要认识到其中存在的风险隐患问题,其中重要的就是火灾事故。火灾事故给农村发展带来的不利影响,不仅严重威胁到农村群众的生…

软件测试与管理-白盒测试-基本路径测试法

知识点: 1.原理 是在程序控制流图的基础上,通过分析控制构造的环路复杂性,导出基本可执行路径的集合,然后根据可执行路径进行测试用例设计的方法。此方法设计出的测试用例需保证被测程序的每个可执行语句至少执行一次。 2.步骤 &a…

连通“数据”,让制造变“聪明”

说起数据智能,你第一时间想到的是什么呢?是科技感十足的智慧城市?还是炫酷的人工智能景象? 数据作为企业的战略资产越来越受到重视,从最初的数据协助业务协同,转化为数据驱动业务,数据驱动运营…

组播应用:SW1、SW2、RT1、RT2、AC1运行PIM-SM

SW1、SW2、RT1、RT2、AC1运行PIM-SM,SW1 Vlan10为C-BSR和C-RP;SW1产品网络(PC1)启用组播,用VLC工具串流播放视频文件“1.mp4”,模拟组播源,设置此视频循环播放,组地址232.1.1.1,端口1234,实现总公司和分公司收看视频,用PC2测试。 一、SW1、SW2、RT1、RT2、AC1配置如…

CV每日论文--2024.5.7

1、Vibe-Eval: A hard evaluation suite for measuring progress of multimodal language models 中文标题:Vibe-Eval: 一个测量多模态语言模型进度的严格评估套件 简介:本文介绍了一种新的开放评估基准 Vibe-Eval,用于评估多模态对话模型的性能。 Vibe…

C++学习笔记——对仿函数的理解

文章目录 思维导图仿函数出现的逻辑仿函数使用上的巧妙 仿函数的本质仿函数的优势仿函数语法的巧妙 思维导图 仿函数出现的逻辑 我们在学习stack时会遇到一些新的问题,这些问题需要我们使用非类型模板参数去解决,即我们需要在设计类时需要有一个途径去快…

Mujoco210和Mujoco-py在 Ubuntu22.04 下的安装

mujoco和mujoco-py的关系:mujoco是一个物理引擎,主要应用于强化学习和最优化控制领域。mujoco-py是mujoco编程的 Python 接口,由OpenAI Gym开发,可以使用mujoco_py方便地调用mujoco的API。 mujoco官网: https://mujoco…

Elementui的el-footer标签使用报错

Elementui的el-footer标签使用报错 其余标签的使用没有报错信息 el-footer的报错信息 原因: ​ 警告信息表示 Vue 不识别 <el-footer> 解决方式: 在组件中进行引入和暴露