babylon.js 学习笔记(1)
简单来说,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)的更多相关文章
- js学习笔记:webpack基础入门(一)
之前听说过webpack,今天想正式的接触一下,先跟着webpack的官方用户指南走: 在这里有: 如何安装webpack 如何使用webpack 如何使用loader 如何使用webpack的开发者 ...
- Vue.js学习笔记(2)vue-router
vue中vue-router的使用:
- JS 学习笔记--9---变量-作用域-内存相关
JS 中变量和其它语言中变量最大的区别就是,JS 是松散型语言,决定了它只是在某一个特定时间保存某一特定的值的一个名字而已.由于在定义变量的时候不需要显示规定必须保存某种类型的值,故变量的值以及保存的 ...
- WebGL three.js学习笔记 使用粒子系统模拟时空隧道(虫洞)
WebGL three.js学习笔记 使用粒子系统模拟时空隧道 本例的运行结果如图: 时空隧道demo演示 Demo地址:https://nsytsqdtn.github.io/demo/sprite ...
- WebGL three.js学习笔记 法向量网格材质MeshNormalMaterial的介绍和创建360度全景天空盒的方法
WebGL学习----Three.js学习笔记(5) 点击查看demo演示 Demo地址:https://nsytsqdtn.github.io/demo/360/360 简单网格材质 MeshNor ...
- WebGL three.js学习笔记 创建three.js代码的基本框架
WebGL学习----Three.js学习笔记(1) webgl介绍 WebGL是一种3D绘图协议,它把JavaScript和OpenGL ES 2.0结合在一起,通过增加OpenGL ES 2.0的 ...
- vue.js 学习笔记3——TypeScript
目录 vue.js 学习笔记3--TypeScript 工具 基础类型 数组 元组 枚举 字面量 接口 类类型 类类型要素 函数 函数参数 this对象和类型 重载 迭代器 Symbol.iterat ...
- 2019-4-29 js学习笔记
js学习笔记一:js数据类型 1:基本数据类型 number类型(整数,小数) String类型 boolean类型 NaN类型其实是一个nu ...
- 一点感悟:《Node.js学习笔记》star数突破1000+
写作背景 笔者前年开始撰写的<Node.js学习笔记> github star 数突破了1000,算是个里程碑吧. 从第一次提交(2016.11.03)到现在,1年半过去了.突然有些感慨, ...
- JS学习笔记5_DOM
1.DOM节点的常用属性(所有节点都支持) nodeType:元素1,属性2,文本3 nodeName:元素标签名的大写形式 nodeValue:元素节点为null,文本节点为文本内容,属性节点为属性 ...
随机推荐
- Web前端杂乱知识复习
OSI OSI是Open System Interconnect的缩写,意为开放式系统互联.其各个层次的划分遵循下列原则: (1)同一层中的各网络节点都有相同的层次结构,具有同样的功能. (2 ...
- 3D Gaussian Splatting 查看工具 splatviz
3D Gaussian Splatting 仓库自带的 SIBR Viewer 运行对显卡有要求, 需要 CUDA_ARCHITECTURE >= 7.x, 在 RTX 4060Ti 上可以运行 ...
- 【网站推荐】推荐几个MCP(Model Context Protocol,模型上下文协议)的网站
MCP网站一:MCP 快速入门 介绍 MCP 快速入门.开发工具.核心架构等内容. https://mcp-docs.cn/introduction MCP网站二:GitHub 官方仓库 由MCP协议 ...
- 补充停牌的日K数据
问题 从TuShare获取的数据,停牌日是没有数据的,这将会在回测时,不能直接参与账户的净值计算,导致账户的净值以及收益计算不准确. 停盘 股票由于某种消息或进行某种活动引起股价的连续上涨或下跌,由证 ...
- C# 在Excel中设置文本的对齐方式、换行、旋转
在 Excel 中,对齐.换行和旋转是用于设置单元格内容显示方式的功能.合理的设置这些文本选项可以帮助用户更好地组织和展示 Excel 表格中的数据,使表格更加清晰.易读,提高数据的可视化效果.本文将 ...
- 乌班图20.04上安装java配置tomcat9
原文参考:https://blog.csdn.net/u010763324/article/details/122678528 Apache Tomcat是一个开源的 Web 服务器和 Java se ...
- JVM划重点:引用类型、垃圾回收算法和内存划分
一.Java四种引用类型 每种编程语言都有操作内存中元素的方式,例如在 C 和 C++ 里是通过指针,而在 Java 中则是通过"引用"(Reference).在 Java ...
- Spring AOP 面向切面编程之AOP是什么
前言 软件工程有一个基本原则叫做"关注点分离"(Concern Separation),通俗的理解就是不同的问题交给不同的部分去解决,每部分专注于解决自己的问题.这年头互联网也 ...
- 「Log」2023.8.24 小记
序幕 \(\texttt{7:20}\):才到校,昨天调题整半夜去了,没想到这么晚来的人也少. 按惯例整理博客. 补题,补串串. \(\color{blueviolet}{P2444\ [POI200 ...
- SAP的JSON没有双引号问题
SAP,默认的JSON转化是这样的: 怎么解决呢? 先找到转换JSON的类:CL_TREX_JSON_SERIALIZER...或者其他名字. SE24里复制这个类出来到ZCL_TREX_JSON_S ...