五、模型加载
Babylon支持加载的模型文件有obj、stl、gltf三种三维文件格式 ,具体情况如下:
Babylon: 引擎自带文件格式,可以用声明的方式定义所有的几何体和场景
obj/mtl:它是一种简单的三维文件格式,MTL文件常同OBJ一起使用。
gltf: 一种通用的用于定义场景、模型以及动画的文件格式
stl:立体成型技术,广泛用于快速成型,三维打印机的模型文件通用格式
具体使用方法(加载GLTF格式,其它类似)如下所示:
1 let Task = loader.addMeshTask("tk_gltf", "", "./model/", "DamagedHelmet.gltf");
//创建加载任务
2 Task.onSuccess = (task)=> { //任务加载成功后
3 for(let mesh of task.loadedMeshes){ //遍历加载到的模型
4 mesh.position=new BABYLON.Vector3(0,2,0); //设置每个物体的位置
5 mesh.scaling=new BABYLON.Vector3(3.0,3.0,3.0); //设置缩放比
6 meshArray.push(mesh); }}; //将模型添加到数组
7 Task.onError = (task, message, exception)=> { //提示简单的错误信息
8 console.log('kjzTask short error message:${message}, specific error
information:${exception}.');
9 }
六、贴图
(1)纹理贴图
材质决定了物体的颜色及质感,而纹理贴图的实质是一系列颜色值,使用纹理贴图时,只需将读取后的信息嵌入到材质中,再将此材质应用到几何对象。具体使用方法如下:
1 var mat = new BABYLON.StandardMaterial("mat", scene); //创建标准材质
2 var texture = new BABYLON.Texture("textures/box.jpg", scene); //加载纹理贴图
3 mat.diffuseTexture = texture; //设置标准材质的漫反射纹理贴图
(2)法向贴图
法向贴图是法向量数据,使用它可以渲染出许多细节,与光源的合理搭配可以极大提升 画面的真实感 ,具体使用方法与纹理贴图类似,只需读取贴图相关数据,并赋值给材质对象的bumpTexture属性。
(3)光照贴图
光照贴图可以减少阴影计算量,并能创建出解析度很高的静态阴影,在使用上同纹理贴图类似。
(3)高光贴图
高光贴图可以模拟出物体高光反射效果,在贴图中像素的颜色值越大,物体表面对光线的反射能力就越强。使用方法同纹理贴图类似。
七、粒子系统
粒子系统通常在程序中用来模拟一些特定的模糊现象,例如火、爆炸、烟尘,发光物体的尾部轨迹等。
(1)精灵
精灵(Sprites)是一种2D图像或者动画,使用它来显示带有alpha通道的图像,它始终面向摄像机,可以在离观测者较远的地方模拟树木等模型。
(2)粒子与粒子系统
粒子通常是小精灵,用于模拟难以重现的现象,如火、烟、水或者抽象的视觉效果,粒子是由粒子系统管理,通过粒子系统的控制可以设置粒子的很多属性,例如颜色、大小、生命周期、发射方向和粒子速度等。
(3)粒子发射器
它代表了粒子系统附着的网格和位置 ,它有多种不同的发射器类型,比较常用的有点发射器、盒子发射器、球形发射器、锥形发射器,系统默认的粒子发射器是盒子发射器。
(4)粒子动画
粒子动画原理是加载包括动画每一帧画面的纹理图,然后换帧播放,粒子效果如同动画播放一样,两者的区别只是代码的使用上略有不同。
(5)GPU粒子
粒子渲染在GPU中进行,可以提高粒子系统中活动粒子的容量和渲染速率。
(6)固定颗粒系统(SPS)
它是单个可更新的网格,其中每个固定颗粒只是这个网格中的单独部分或面。它可以缩放、旋转、平移、纹理 、移动等。
它可以看成由几何体等大型颗粒构成的粒子系统,但没有粒子发射器、粒子物理性质和粒子回收器等。其用法是首先创建固体颗粒系统,然后从SPS添加粒子,最后构建SPS网格。
八、物理引擎
Babylon中有一个物理引擎插件系统,允许开发人员将物理交互添加进场景中。它支持Cannon.js物理引擎与Oimo.js等物理引擎。
启用物理引擎代码 如下:
1 var scene = new BABYLON.Scene(engine); //创建场景
2 var gravityVector = new BABYLON.Vector3(0, -9.81, 0); //初始化重力加速度
3 var physicsPlugin = new BABYLON.CannonJSPlugin(); //初始化物理引擎插件
4 scene.enablePhysics(gravityVector, physicsPlugin); //启用物理引擎
说明:要想使用Oimo.js物理引擎,只需将scene.enablePhysics()中的第二个参数更改为new BABYLON.OimoJSPlugin()即可。
物理引擎中另一个概念是关节,它是两个物体之间的约束,使用关节可以将两个物体以一体的方式约束在一起。引擎支持多种类型的关节,如距离、铰链、球、插座、车轮、滑块、点对点、弹簧等关节 。
九、渲染到纹理
`渲染到纹理技术可以很方便地在渲染出的画面中添加各种特效,例如SSAO技术,它能显著增强场景的深度和真实感,并且能让画面更细腻,让场景细节更加明显。