babylon.js

网页3D之babylon.js 最近公司有虚拟仿真方面的想法,所以做了一些网页3D方面的研究,以及代码,这里记录一下 框架选择 之前用过threejs,所以一开始考虑用threejs做,但是之前用threejs的时候碰到过一个问题:物体位置坐标以及角度的调整太麻烦。每次调整后要刷新网页看下调整效果,再根据效果修改数据,反复修改。一个模型有时候就能弄一下午,实在是浪费了太多生命在上面。 后来在github上看到了babylonjs,看到官网上炫酷的例子效果,就被吸引住了。更吸引我的是babylonEditor,网页上的三维建模可以在这个编辑 阅读详情

babylon.js是什么?

babylon.js是一个完整的JavaScript框架,用于构建HTML5,WebGL,WebVR和Web Audio的3D游戏和体验. 除了游戏用来在页面实现一些3D场景也是没问题的.官网

安装Babylon.js

https://doc.babylonjs.com/babylon101/how_to_get

要安装最新版本的巴比伦,请使用:

npm install --save babylonjs

这将安装babylonjs的javascript文件,还将包含TypeScript声明文件。

要在ts文件中声明,请使用:

import * as BABYLON from 'babylonjs';

创建场景

	<script>
	var canvas = document.getElementById("show1");   // 创建画布
	
	var engine = new BABYLON.Engine(canvas, true);   // 创建渲染引擎
	
	var create_scene = function(){
	
	// 创建一个场景并返回
	
	var scene = new BABYLON.Scene(engine);  // 创建场景
	/* 创建一个弧形旋转摄像机. 参数说明如下:
	* "Camera": 摄像机名称
	* 第一个 Math.PI / 2 : alpha, 可以理解为水平角度.具体请看文档
	* 第二个 Math.PI / 2 : beta, 可以理解为垂直角度.具体请看文档
	* 2: radius, 这个是半径的意思.
	* new BABYLON.Vector3(0, 0, 5) : target position.目标点的三维位置,可以理解为中心.这是一个向量类的实例
	* scene: scene,场景变量.
	* 详细文档请看这里: 看着图比较好理解的.https://doc.babylonjs.com/babylon101/cameras#arc-rotate-camera
	*/
	
	var camera = new BABYLON.ArcRotateCamera("Camera", Math.PI / 2, Math.PI / 2, 2, new BABYLON.Vector3(0, 0, 5), scene);
	
	/* 让摄像机控制画布.
	* canvas: element 是一个dom对象.
	* true: noPreventDefault 是否阻止元素的默认事件.
	* api: https://doc.babylonjs.com/api/classes/babylon.targetcamera
	*/
	
	camera.attachControl(canvas, true);
	
	/* 创建2个光源. HemisphericLight是半球形光源.PointLight是点光源.
	* 第一个参数: name. 名字.
	* 第二个参数: direction, 方向,是一个向量的实例.
	* 第三个参数: scene, 场景.
	* api: https://doc.babylonjs.com/api/classes/babylon.hemisphericlight#constructor
	*/
	
	var light1 = new BABYLON.HemisphericLight("light1", new BABYLON.Vector3(1, 1, 0), scene);
	var light2 = new BABYLON.PointLight("light3", new BABYLON.Vector3(0, 1, -1), scene);
	
	/* 创建一个球形的控制网格. options参数,请看api
	* 第一个参数 name: 字符串, 名字
	* 第二个参数 options: object, 参数对象.
	* 第三个参数 scene: 场景
	* api: https://doc.babylonjs.com/api/classes/babylon.meshbuilder#createsphere
	*/
	
	var sphere = BABYLON.MeshBuilder.CreateSphere("sphere", {diameter: 2}, scene);
	return scene;
	};
	
	var scene = create_scene();
	
	/* 不停的渲染场景.
	* runRenderLoop 是一个渲染循环.
	* api: https://doc.babylonjs.com/api/classes/babylon.engine#runrenderloop
	*/
	
	engine.runRenderLoop(function(){
	scene.render();   // 渲染场景
	
	
	});
	window.addEventListener("resize", function(){
	engine.resize();
	});
	
	</script>

渲染结果:
在这里插入图片描述
更多例子

创建基础模型

https://doc.babylonjs.com/babylon101/discover_basic_elements

1.MeshBuilder 方法
创建模型的方法一般是:

var shape = BABYLON.MeshBuilder.Create Shape(名称,配置项,场景);

配置项的参数允许你设置形状大小以及是否可以更新它之类的操作。

2.创建立方体
创建一个默认的立方体

var box = BABYLON.MeshBuilder.CreateBox("box", {}, scene);

创建一个带有配置项的立方体

var myBox = BABYLON.MeshBuilder.CreateBox("myBox", {height: 5, width: 2, depth: 0.5}, scene);

size (number)每个边的长度 1
height (number)立方体的高度 size
width (number)立方体的宽度 size
depth (number)立方体的深度 size
faceColors (Color4[])六个颜色对象组成的数组,每个颜色代表一个面的显示颜色 每个面默认 Color(1,1,1,1)
faceUV (Vector4[]) 由六个四维向量组成的数组,每个代表一个面的uv映射 每个面的uv映射从 0,0 到 1,1
updatable (boolean)如果网格是可更新的,则设置为true false
sideOrientation (number)面的显示方向 DEFAULTSIDE
3.创建球体
创建默认的球体

var sphere = BABYLON.MeshBuilder.CreateSphere("sphere", {}, scene); //默认的球体

创建一个设置配置项的球体

var mySphere = BABYLON.MeshBuilder.CreateSphere("mySphere", {diameter: 2}, scene);

segments (number)水平的分段数 32
diameter (number)球体的直径 1
diameterX (number)X轴上的球的直径 diameter
diameterY (number) Y轴上的直径 diameter
diameterZ (number)Z轴上的直径 diameter
arc (number)沿纬度线显示区域 值介于0到1 1
slice (number)沿经度绘制显示 值介于0到1 1
updatable (boolean)如果网格是可更新的,则设置为true false
sideOrientation (number)面的显示方向 DEFAULTSIDE

4.创建平面
创建一个默认的平面

var plane = BABYLON.MeshBuilder.CreatePlane("plane", {}, scene);

创建一个带有配置项的平面

var myPlane = BABYLON.MeshBuilder.CreatePlane("myPlane", {width: 5, height: 2}, scene);

size (number)平面每个边的长度 1
height (number)平面的高度 size
width (number)平面的宽度 size
updatable (boolean)如果网格是可更新的,则设置为true false
sideOrientation (number)面的显示方向 DEFAULTSIDE
frontUVs (Vector4[])正面UV映射,只有在sideOrientation 设置为双面(BABYLON.Mesh.DOUBLESIDE)时使用 Vector4(0,0,1,1)
backUVs (Vector4[])背面UV映射,只有在sideOrientation 设置为双面(BABYLON.Mesh.DOUBLESIDE)时使用 Vector4(0,0,1,1)
sourcePlane (Plane)这是数学平面,用于修改平面网格的位置朝向 空值
sourcePlane是一个平面网格的独特选择,它提供了一种方法来定向和定位它。

现在只考虑它的方向在创建上是矢量(0,0,1)现在你要让方向成为矢量(0,1,1)然后你用它来创建一个源平面

var sourcePlane = new BABYLON.Plane(0,0,1,0);

这就创建了一个数学平面,它被用作定位源。第四个参数是向方向矢量方向移动的距离。这里暂时设为0。

5.创建地面
创建一个默认的地面

var ground = BABYLON.MeshBuilder.CreateGround("ground", {}, scene);

创建一个自定义的地面

var myGround = BABYLON.MeshBuilder.CreateGround("myGround", {width: 6, height: 4}, scene);

size (number)地面每个边的长度 1
height (number)地面的高度 size
width (number)地面的宽度 size
updatable (boolean)如果网格是可更新的,则设置为true false
subdivisions (number)将地面分成的几块 1

创建天空影像

所谓的天空盒其实就是将一个立方体展开,然后在六个面上贴上相应的贴图,如上图所示。
在实际的渲染中,将这个立方体始终罩在摄像机的周围,让摄像机始终处于这个立方体的中心位置,然后根据视线与立方体的交点的坐标,来确定究竟要在哪一个面上进行纹理采样。具体的映射方法为:设视线与立方体的交点为(x,y,z)(x,y,z),在x、y、zx、y、z中取绝对值最大的那个分量,根据它的符号来判定在哪个面上采样。

每个图像的名称应有一个共同的部分,后跟一个由_px,_nx,_py,_ny,_pz或_nz给出的位置,分别对应于x,y或z轴的正(p)或负(n)

图片示例:
在这里插入图片描述

在这里插入图片描述

var skybox = BABYLON.MeshBuilder.CreateBox("skyBox", {size:1000.0}, scene);
var skyboxMaterial = new BABYLON.StandardMaterial("skyBox", scene);
skyboxMaterial.backFaceCulling = false;
skyboxMaterial.reflectionTexture = new BABYLON.CubeTexture("textures/skybox", scene);
skyboxMaterial.reflectionTexture.coordinatesMode = BABYLON.Texture.SKYBOX_MODE;
skyboxMaterial.diffuseColor = new BABYLON.Color3(0, 0, 0);
skyboxMaterial.specularColor = new BABYLON.Color3(0, 0, 0);
skybox.material = skyboxMaterial;

https://www.babylonjs-playground.com/#UU7RQ#1

如何突出显示网格
效果:
在这里插入图片描述

在最基本的形状中,只需要实例化场景中的一个高亮层并在其中添加要高亮的网格。

高亮网格

var hl = new BABYLON.HighlightLayer("hl1", scene);

hl.addMesh(sphere, BABYLON.Color3.Green());

取消高亮网格

var hl = new BABYLON.HighlightLayer("hl1", scene);

hl.addMesh(sphere, BABYLON.Color3.Green());

hl.removeMesh(sphere);

动画高亮网格
可以在运行时通过图层的模糊大小属性动态更改它:

var alpha = 0;

scene.registerBeforeRender(() => {

alpha += 0.06;

hl2.blurHorizontalSize = 0.3 + Math.cos(alpha) * 0.6 + 0.6;

hl2.blurVerticalSize = 0.3 + Math.sin(alpha / 3) * 0.6 + 0.6;

});

相关链接
BabylonJS 主站 许多很棒的演示而且底部有有用的链接
BabylonJS 论坛 询问,助人,预见小伙伴
BabylonJS GitHub 站点 下载, 教程, 和许多链接 (在那个页面的底部)
BabylonJS API 文档 所有Babylon.js类的完整 API 图册
BabylonJS 沙箱 在线测试从建模工具导出的 .babylon 文件.

babylonjs使用笔记 目录一、关于二级目录三级目录参考资料 一、关于 babylonjs是用于3D网页游戏开发的WEBGL插件,微软开发和维护的web端3D引擎。 官网地址 中文地址 babylonjs提供了很多很好用的工具, 二级目录 三级目录 参考资料 真是要加油学习呢~ [1]: 基于babylon.js的3D网页游戏从零教程 [2]: 举个例子网:babylonjs教程 ... 阅读详情

相关推荐

vue3 + Babylon.js 构建Web 3D场景

vue3 + Babylon.js 构建web 3D场景。

通达的博客 3426

Babylon.js 一个专注web端的3D引擎,飞一般的感觉

2011年发布的 WebGL 到今年发布的 WebGPU,Web端的渲染在高速的发展中,做为一个前端你要是错过了 WebRTC, WebGL 千万别错过了 WebGPU,再不卷 3D 就老了一、Babylon是什么?世界上最强大、最漂亮、最简单的 Web 渲染引擎之一。对所有人完全开放和免费。尽可能简单,让每个人都能将他们的想法变为现实。优势:1、基于 typescript 开发,轻量,功能丰富,文档清晰,社区活跃,运营团队热情。

xiao_bin_shen的博客 7086

Babylon.js 第11节 使用babylon开发

这将允许我们的 UMD 定义在 node_modules 中找到 oimo 并使用它。如果您使用 AMD,您需要首先将 oimo 声明为模块(因为 oimo 使用匿名 AMD 定义),然后babylon会将其自动引入。Cannon 和 Oimo(都是物理引擎)作为依赖项交付,Cannon 和 Oimo 都是可选依赖项。如果您想使用其中任何一个。注:不能同时使用Babylon.js ES6的包和往期版本的包。如果使用了node.js,还可以用require引入。mygame.ts是项目的入口点。

m0_73334402的博客 2136

全网最详Babylon.js入门教材-第一个3D场景

Q:Babylon.js是什么?????️Babylon.js 是一个强大的、开源的、基于 WebGL 和 WebGPU 的 3D 引擎,用于在网页上创建和渲染 3D 图形。它提供了一套丰富的 API 和功能,包括物理引擎、粒子系统、骨骼动画、碰撞检测、光照和阴影等,可以帮助开发者快速创建复杂的 3D 场景和交互。Q:我为什么要写该系列的教材? ????️因为公司业务的需要因而要在项目中使用到 Babylon...

qq_39448719的博客 7935

Babylon.js WebGL与性能优化

Babylon.js 是一个基于WebGL的3D游戏引擎,它提供了一整套工具和API,简化了WebGL的使用,让开发者可以更容易地创建交互式的3D应用。在底层,Babylon.js通过WebGL的纹理单元管理纹理,包括纹理的加载、绑定、采样参数设置等,确保纹理正确应用到渲染对象上。以下是一个简单的例子,展示了Babylon.js如何创建一个3D网格并设置其颜色,这部分操作在底层涉及到WebGL的顶点缓冲区和颜色缓冲区的设置。然而,这些细节都被封装在了Babylon.js的源码中,通常不需要开发者直接处理。

天涯学馆 857

华为2021年天线工程师笔试题目回忆总结(持续更新)

1. 判定长线和短线 所谓长线是指传输线的几何长度和线上传输电磁波的波长的比值(即电长度)大于或接近于1。反之称为短线。是相对于波长而言的。 1000m的传输线,对于频率为50hz(即波长为6000km)的交流电来说,仍远小于波长,应视为短线。长线和短线的区别还在于:长线为分布参数电路,而短线是集总参数电路。 2. 判定传输线的容性和感性 传输线上的输入阻抗具有以下特点: 1/4波长变换性:感性负载与容性负载变换,开路与短路变换; 1/2波长重复性:相距1/2波长的整数倍的两个点输入阻抗都相等。1/4开路传

ludashi3的博客 9530

Babylon.js引擎

Babylon.js支持WebGL 2.0的新特性包括多重渲染目标,顶点数组对象,一致缓冲区对象,遮挡查询和3D纹理等。具体功能:❑ 根据开发人员的需求可方便快捷地创建出3D图形。❑ 为物体的渲染提供多种类型的纹理和材质。❑ 自带强大的阴影计算功能,支持PCF和PCSS阴影算法。❑ 对物理引擎进行封装,为Web游戏开发者提供了极大的便利。❑ 支持多种格式的3D物体模型和骨骼动画,让3D场景更加丰富。❑ 引擎中带有多种着色器,可以实现多种逼真的效果。

水寿十八公专栏 990

ESXI 8.0虚拟机安装OpenWRT软路由详细教程

OpenWrt 是嵌入式的 Linux 路由器固件,OpenWrt在稳定运行的同时提供了强大的扩展能力,用户可以完全的定制属于自己的路由系统,满足不一样的个性化需求,本文讲解如何使用ESXI安装OpenWRT,打造属于自己的软路由。本次安装使用的是版本。默认登录信息:用户:root密码:password下载固件:https://github.com/haiibo/OpenWrt/releases/tag/X86_64【CPU配置】:4核心。

qq_27121281的博客 3913

Babylon.js 的Hello World

最近准备使用业余时间做一款游戏玩玩,为了专注前端三十年称号,所以,准备研究一下浏览器端免费开源的WebGL游戏引擎Babylon.js。首先,查看一下官网的案例: 案例可以看到案例当中有一个球和一个平面。这个案例也是相对很简单的。 接下来看一下源码实现: 在页面当中,首先设置一下css样式和canvas标签 &lt;!DOCTYPE html&gt; &lt;html lang="zh"&gt;...

现在学习也不晚 3946

GBase8a-GDCA认证考试-复习参考题

为提升产品服务水平定期举办GBase产品认证培训,培训更多GBase数据库专业人员,满足用户快速成长的业务需求,建设GBase产品生态。请注意甄别,根据所学知识综合判断,正确率97%(97分)。

weixin_41826637的博客 2372

Star CCM+ 202206 (17.04) 详细安装步骤

StarCCM+ 17.04 安装包和详细安装步骤

薛定谔的alpha狗 3万+

Babylon.js入门指南:强大的JavaScript 3D渲染引擎

Babylon.js是一个功能强大、美观、简单且开源的JavaScript 3D渲染引擎,专为游戏开发和交互式3D应用程序设计。该项目由微软团队开发并维护,已经成为WebGL和WebGPU领域的重要开源项目之一。本文将从项目架构、核心特性、开发环境搭建到第一个3D场景创建,全面介绍Babylon.js的使用方法和最佳实践。 ## Babylon.js项目概述与核心特性介绍 Babylon.js

gitblog_00168的博客 1449

LVGL在嵌入式Linux系统上的高效移植与优化实践

本文详细介绍了在嵌入式Linux系统(特别是ARM平台)上移植和优化LVGL图形库的完整实践流程。内容涵盖从开发环境搭建、代码获取、CMake工程配置,到关键配置文件定制、显示与输入设备端口移植,以及内存、渲染等核心性能优化技巧,旨在帮助开发者高效构建流畅的嵌入式UI应用。

weixin_29274969的博客 450

Babylon.js基础知识要点,Demo示例

Babylon.js是一个强大的、开源的、基于 JavaScript 的 3D 游戏和应用引擎,它可以在网页浏览器中运行。它提供了丰富的功能来创建复杂的 3D 场景、动画、物理效果等。以下是一些 Babylon.js 的基础知识要点及其示例。以上示例代码片段展示了如何使用 Babylon.js 创建一个简单的3D场景,包括设置场景、相机、灯光、网格、材质以及动画。通过这些基础知识要点,你可以开始构建自己的3D游戏或应用。

软件行业技术文化交流。 939

【HSCNN解析】HSCNN:从欠采样光谱图重建高光谱图的CNN网络

本文介绍HSCNN,是一个将欠采样光谱图重建为高光谱图的纯CNN网络,2017年提出。

上个大学哪有不疯的?硬撑罢了! 1619

docker安装的 n8n提示Your n8n server is configured to use a secure cookie, however you are either visiting

将原来的docker n8n进行删除后即可通过一下方式重新安装,如安装完n8n,提示。

满地找牙的博客 3366

babylon.js 游戏_使用Three.js或Babylon.js在具有JavaScript和WebGL的浏览器中轻松加速3D游戏

babylon.js 游戏Let's ignore that we haven't got a web-agreed-upon way to do just about anything, much less basic line-of-business apps with data-bound text boxes over data, and just revel in the fact th...

1645

2026年Java 开发工程师常见面试简答题

本文整理了Java开发工程师面试常见简答题及详细解析,涵盖Java基础、集合框架、并发编程、JVM等核心考点。主要内容包括:1. Java基础概念:JDK/JRE/JVM区别、面向对象特性、重载与重写、接口与抽象类、String特性等 2. 集合框架:ArrayList/LinkedList区别、HashMap实现原理、线程安全方案、集合类型对比 3. 并发编程:synchronized原理、volatile作用、线程创建方式、线程池参数与策略、死锁处理 4. JVM相关:内存区域划分、垃圾回收算法、类加载

不务正业的猿 369

分享babylon.js实现Web三维场景

使用 Babylon.js 为混合现实体验创建 3D 对象和交互。

通达的博客 2891

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

Three.js vs. Babylon.js 最新对比【2024】

Babylon.js 和 Three.js 之间的第一个区别是 Babylon.js 是一个实时 3D 引擎,使用 HTML5 后显示 3D 图形。相反,three.js 是一个 JavaScript 库,也是一个用于在 Web 浏览器中制作和显示动画 3D 图形的 API。由于 Babylon.js 和 Three.js 都是开源的,因此它们的源代码可以在 GitHub 上找到。Babylon.js 更难。为了你的方便,我创建了一个表格来突出显示 Three.js 和 Babylon.js 之间的差异。

新缸中之脑 3909

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

与 Babylon.js 共赴千里之行(一)

3D 应用和游戏开发的世界是一个广阔且不断变化的领域。通过 WebGL 将现代 GPU 硬件的所有令人惊叹的功能暴露给网络浏览器,任何人只要有一些 JavaScript 知识,就能实现 AAA 质量的交互式渲染。Babylon.js 正是实现轻松体验和强大应用(使用 WebGL 技术构建)的正确工具。虽然浏览器软件和硬件标准的改变和演变以它们自己的速度和自己的时间表进行,但 Babylon.js 是一个优先考虑保持向后兼容性的框架。

龙哥盟 2049

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

Babylon.js Exporters 使用教程

Babylon.js Exporters 是一套开源工具,用于将流行的3D建模软件如3ds Max、Maya等导出的模型转换为 Babylon.js 和 glTF 文件格式。这些工具使得开发者能够更加容易地将3D内容导入到 Babylon.js 引擎中,进而用于网页或应用程序中的3D渲染。 ## 2. 项目快速启动 以下是一个快速启动的指南,帮助您开始使用 Babylon.js Exporte

gitblog_00973的博客 914

Babylon.js入门简介和开发实例

Babylon.js是一款WebGL开发框架。和Three.js类似。主要的技术区别是Three.js还试图回退兼容CSS 3D。 Three.js是完全社区推动的,比Babylon.js要成熟些,而Babylon.js是微软推动的,和微软的相关技术结合更好。 本文对Babylon.js的使用做个简单的介绍,如何创建场景scene、基本的网孔对象mesh如3D球体和平面,添加相机、光照和材料。

陈小峰(iefreer)的专栏 3万+

babylon.js文档笔记

babylon 一 基本使用 引入 <script src="https://preview.babylonjs.com/babylon.js"></script> <script src="https://preview.babylonjs.com/loaders/babylonjs.loaders.min.js"></script> import * as BABYLON from "babylonjs"; import "babylonjs-gu

weixin_45727272的博客 5381

WebGL框架:Three.js和Babylon.js的比较

今天的web浏览器已经走了很长的路。由于出色的JavaScript WebGL api ,现代浏览器完全有能力在没有第三方插件帮助的情况下呈现先进的2 d和3 d图形。利用专用的图形处理器的性能,WebGL使我们访问的网页实现动态阴影和现实的物理。正如你可能已经猜到的,如此强大的api通常有一个缺点。WebGL当然也不例外,其缺点是形式的复杂性。不要害怕,然而,当我们探索两个完全有能力框架的目标是,

LoveMolly 3万+
上一篇: js中的event.stopPropagation()阻止冒泡用法和event.preventDefault()用法
下一篇: Fabric.js
蜗牛与藤曼
博客等级 码龄9年 1万+粉丝 89原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值