简单来说,babylon.js 是一个能跑在浏览器上的(3D)游戏渲染引擎,而且官方提供了一个友好在线交互学习平台Playground,其开源项目在github上star数截止2023.05.14高达20.6K。下面是官方文档的学习笔记 :

一、hello world

强烈建议新手通过Playground在线体验,先来看第1个示例:

核心代码如下:(关键地方已加注释)

//核心代码
var createScene = function () {
// 创建babylon场景(或者叫"舞台"更容易理解)
var scene = new BABYLON.Scene(engine); // 新建1个摄像机(对着舞台,有兴趣的同学可以调整下0, 5, -10这几个参数值,可以分别控制x,y,z三个轴的观察视角)
var camera = new BABYLON.FreeCamera("camera1", new BABYLON.Vector3(0, 5, -10), scene); // 将摄像机的目标正对场景中心
camera.setTarget(BABYLON.Vector3.Zero()); //摄像头与canvas关联后,鼠标就能控制目标旋转、放大、缩小等动作
camera.attachControl(canvas, true); //光源(想象一下舞台上,演员表演时,要有聚光灯照在主角身上)
var light = new BABYLON.HemisphericLight("light", new BABYLON.Vector3(0, 1, 0), scene); // 控制光源的亮度
light.intensity = 0.7; //在scene上放置1个球(diameter-直径,segments -边的个数,越大球看起来越圆润,有兴趣的,可以把segments调整成1对比看看)
var sphere = BABYLON.MeshBuilder.CreateSphere("sphere", { diameter: 2, segments: 32 }, scene); //将球向上移1/2的高度(即:让球底部在场景中心点之上,默认y=0,球心与场景中心重合)
sphere.position.y = 1; //放一块"地板"在场景中央(长宽均为6,即正方形)
var ground = BABYLON.MeshBuilder.CreateGround("ground", { width: 6, height: 6 }, scene); return scene;
};

上面这段代码不用死记,理解scene、camera、light、mesh 这4要素即可。

运行效果:

在线地址:https://yjmyzz.github.io/babylon_js_study/day01/01.html

二、设置Groud为红色

可以给地板换个颜色

//核心代码
var createScene = function () {
... //放一块"地板"在场景中央(长宽均为6,即正方形)
var ground = BABYLON.MeshBuilder.CreateGround("ground", { width: 6, height: 6 }, scene); //!!!设置地板为红色
let groundMaterial = new BABYLON.StandardMaterial("Ground Material", scene);
ground.material = groundMaterial;
ground.material.diffuseColor = BABYLON.Color3.Red(); return scene;
};

运行效果:

在线地址:https://yjmyzz.github.io/babylon_js_study/day01/02.html

三、地板贴图

//核心代码
var createScene = function () {
... //放一块"地板"在场景中央(长宽均为6,即正方形)
var ground = BABYLON.MeshBuilder.CreateGround("ground", { width: 6, height: 6 }, scene); let groundMaterial = new BABYLON.StandardMaterial("Ground Material", scene);
ground.material = groundMaterial; //!!!设置地板贴上红黑相间的方块
let groundTexture = new BABYLON.Texture(Assets.textures.checkerboard_basecolor_png.rootUrl, scene);
ground.material.diffuseTexture = groundTexture; return scene;
};

在线地址:https://yjmyzz.github.io/babylon_js_study/day01/03.html

四、添加复杂对象

//核心代码
var createScene = function () {
... //设置地板贴上红黑相间的方块
let groundTexture = new BABYLON.Texture(Assets.textures.checkerboard_basecolor_png.rootUrl, scene);
ground.material.diffuseTexture = groundTexture; //加1个小怪物
BABYLON.SceneLoader.ImportMesh("", Assets.meshes.Yeti.rootUrl, Assets.meshes.Yeti.filename, scene, function (newMeshes) {
newMeshes[0].scaling = new BABYLON.Vector3(0.1, 0.1, 0.1);
}); return scene;
};

注:由于球体部分的代码,并没有去掉,所以最终球跟小怪物是叠加在一起的,形成了1对奇怪的组合。

在线地址: https://yjmyzz.github.io/babylon_js_study/day01/04.html(小怪物加载需要一点时间,打开网页时要等一会儿)

tips:任何复杂的对象(即mesh),都是一堆小三角形及各种切面的组合,三角形数越多,最终的对象越逼真。借用一张官网的图体会下:

这里可以做1个小测试,把球体的segments值,调成1个很小的值,比如4

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

就能发现球不那么圆润了。

五、改变摄像机

//核心代码
var createScene = function () {
... // 新建1个摄像机(对着舞台,有兴趣的同学可以调整下0, 5, -10这几个参数值,可以分别控制x,y,z三个轴的观察视角)
// var camera = new BABYLON.FreeCamera("camera1", new BABYLON.Vector3(0, 5, -10), scene);
var camera = new BABYLON.ArcRotateCamera("camera", BABYLON.Tools.ToRadians(90), BABYLON.Tools.ToRadians(65), 10, BABYLON.Vector3.Zero(), scene); ... // //在scene上放置1个球(diameter-直径,segments -边的个数,越大球看起来越圆润,有兴趣的,可以把segments调整成1对比看看)
// var sphere = BABYLON.MeshBuilder.CreateSphere("sphere", { diameter: 2, segments: 32 }, scene); // //将球向上移1/2的高度(即:让球底部在场景中心点之上,默认y=0,球心与场景中心重合)
// sphere.position.y = 1; ... return scene;
};

换了1种摄像机,同时把球体去掉后

在线地址:https://yjmyzz.github.io/babylon_js_study/day01/05.html

babylon.js 学习笔记(1)的更多相关文章

  1. js学习笔记:webpack基础入门(一)

    之前听说过webpack,今天想正式的接触一下,先跟着webpack的官方用户指南走: 在这里有: 如何安装webpack 如何使用webpack 如何使用loader 如何使用webpack的开发者 ...

  2. Vue.js学习笔记(2)vue-router

    vue中vue-router的使用:

  3. JS 学习笔记--9---变量-作用域-内存相关

    JS 中变量和其它语言中变量最大的区别就是,JS 是松散型语言,决定了它只是在某一个特定时间保存某一特定的值的一个名字而已.由于在定义变量的时候不需要显示规定必须保存某种类型的值,故变量的值以及保存的 ...

  4. WebGL three.js学习笔记 使用粒子系统模拟时空隧道(虫洞)

    WebGL three.js学习笔记 使用粒子系统模拟时空隧道 本例的运行结果如图: 时空隧道demo演示 Demo地址:https://nsytsqdtn.github.io/demo/sprite ...

  5. WebGL three.js学习笔记 法向量网格材质MeshNormalMaterial的介绍和创建360度全景天空盒的方法

    WebGL学习----Three.js学习笔记(5) 点击查看demo演示 Demo地址:https://nsytsqdtn.github.io/demo/360/360 简单网格材质 MeshNor ...

  6. WebGL three.js学习笔记 创建three.js代码的基本框架

    WebGL学习----Three.js学习笔记(1) webgl介绍 WebGL是一种3D绘图协议,它把JavaScript和OpenGL ES 2.0结合在一起,通过增加OpenGL ES 2.0的 ...

  7. vue.js 学习笔记3——TypeScript

    目录 vue.js 学习笔记3--TypeScript 工具 基础类型 数组 元组 枚举 字面量 接口 类类型 类类型要素 函数 函数参数 this对象和类型 重载 迭代器 Symbol.iterat ...

  8. 2019-4-29 js学习笔记

    js学习笔记一:js数据类型   1:基本数据类型       number类型(整数,小数)      String类型          boolean类型        NaN类型其实是一个nu ...

  9. 一点感悟:《Node.js学习笔记》star数突破1000+

    写作背景 笔者前年开始撰写的<Node.js学习笔记> github star 数突破了1000,算是个里程碑吧. 从第一次提交(2016.11.03)到现在,1年半过去了.突然有些感慨, ...

  10. JS学习笔记5_DOM

    1.DOM节点的常用属性(所有节点都支持) nodeType:元素1,属性2,文本3 nodeName:元素标签名的大写形式 nodeValue:元素节点为null,文本节点为文本内容,属性节点为属性 ...

随机推荐

  1. Java线程控制: sleep、yield、join深度解析

    结论先行 sleep:主动让出CPU但保持锁,适合控制执行节奏和优化CPU占用 yield:建议让出CPU但无强制力,适用场景有限且效果不稳定 join:通过等待机制实现线程顺序控制,底层基于wait ...

  2. 在postman中为每个测试用例添加相同的请求头

    最近在学习的时候看到可以在postman中可以为每个测试用例添加相同的请求头,这个就不用单独去设置了,可以说是非常好用,遂记录一下. 具体设置如下: https://postman.org.cn/

  3. 在鸿蒙Next中开发一个月历组件

    最近一直在出差,工作繁忙,很久没有时间更新文章了,连华为开发者大会也错过了.今天周末,忙里偷闲给大家分享一个鸿蒙月历组件. 这样的组件大家在工作中应该经常会遇到,而鸿蒙又没有提供一个这样的系统组件,今 ...

  4. 环境搭建: Vue3+Echarts5+vue-eharts + 移动端rem适配

    对于数据可视化的最后一站, 就是移动数据报表的展示, 毕竟手机端的适普性, 便携性, 灵活性更高. 包括我自己也是更多在移动端进行轻量办公. 而用主流的商业BI平台在PC端的体验基本可打80分, 而在 ...

  5. 推荐一个Elasticsearch ES可视化客户端工具:ES-King,支持win、mac、linux

    ES-King:开源免费,一个现代.实用的ES GUI客户端,支持多平台. 下载地址:https://github.com/Bronya0/ES-King 我之前开源的kafka客户端kafka-ki ...

  6. 轻松掌握Manim的.animate语法:让动画编程更简单

    在Manim中,.animate语法是一个非常实用的功能,它能让你的动画代码变得更加简洁和直观. 本文将详细介绍.animate语法,看看它是如何让动画制作变得更加简单又有趣,即使是编程新手也能轻松上 ...

  7. InheritableThreadLocal父子线程变量共享实现原理

    概述   我们知道ThreadLocal 的设计初衷是为了解决多线程并发导致的线程安全问题,向每一个线程提供一个自己的变量副本,实现变量隔离.那如何在不同线程之间共享变量呢?InheritableTh ...

  8. socket编程浅知识

    1:网络7层和tcp/ip5层 tcp协议; 三次握手 四次挥手 使用字节流进行信息交互 2:IP和端口 ip: 计算机在网络里面的唯一标识 ​ 端口: 程序在电脑里面的唯一标识 3: socket编 ...

  9. STM32深度学习实战

    STM32深度学习实战 1. 前言 ​ 本文主要记录基于 tensorflow 的简单模型在 stm32 上运行测试的调试记录,开发人员应对深度学习基础理论和 tensorflow 框架基础操作有一定 ...

  10. 大模型学习笔记(一)—— transformer

    写在前面,一定要看懂self attention的代码实现,注意矩阵乘是谁@谁,矩阵乘不可以变换位置!!! Attention的出现 由于翻译任务往往不是1 vs 1的翻译,因此输入与输出不等长,所以 ...