babylonjs 分部加载模型_初学WebGL引擎-BabylonJS:第2篇-基础模型体验

本文介绍了使用BabylonJS加载3D模型的基础知识,包括FreeCamera和ArcRotateCamera的使用,以及各种基础元素如Box、Sphere、Plane等的创建。此外,还展示了如何用线条和环形来拼写英文单词。
摘要由CSDN通过智能技术生成

此次学习进度会比之前快很多,有了合适的学习方法后也就会有更多的乐趣产生了。

接上一章代码

上章代码

Babylon - Getting Started

}#renderCanvas{width:100%;height:100%;touch-action:none;

}

varcanvas=document.getElementById('renderCanvas');//加载巴比伦3D引擎

varengine= newBABYLON.Engine(canvas,true);//创建场景

varcreateScene= function() {//通过引擎创建基本场景

varscene= newBABYLON.Scene(engine);//创建一个开放免费的相机,地点位于x:0(横向距离), y:5(高度), z:-10(纵向距离)

varcamera= newBABYLON.FreeCamera('camera1',newBABYLON.Vector3(9,5,-10), scene);//相机到场景的起源

camera.setTarget(BABYLON.Vector3.Zero());//相机放置画布

camera.attachControl(canvas,false);//创建基本光源, 目标位于 x:0,y:1,z:0 -(由天空出现)

varlight= newBABYLON.HemisphericLight('light1',newBABYLON.Vector3(0,1,0), scene);//创建一个内置的“球”的形状,它的构造函数包括5个参数:名称、宽度、深度、细分,场景(例子中仅4个参数)

varsphere=BABYLON.Mesh.CreateSphere('sphere1',16,2, scene);//球向上移动高的二分之一距离

sphere.position.y= 1;//创建一个内置的“地面”,它的构造函数包括5个参数:名称、宽度、深度、细分,场景

varground=BABYLON.Mesh.CreateGround('ground1',6,6,2, scene);//返回该场景

returnscene;

}//赋予该场景于变量

varscene=createScene();//在引擎中循环运行这个场景

engine.runRenderLoop(function(){

scene.render();

});//追加事件:帆布与大小调整程序

window.addEventListener('resize',function(){

engine.resize();

});

});

运行结果

【playground】-basic scene(基础场景)

本部分同上述代码相同。跳过

【playground】-basic elements(基础元素)

本部分引用了新镜头

ArcRotateCamera

该镜头可以锁定一个点成球形观察

以及多个控件的使用

HemisphericLight:灯关

box:箱

sphere:球

plane:平面

cylinder:油缸

torus:环

TorusKnot:环结

lines:线

ribbon:丝带

下面是官方源码:

var createScene = function() {var scene = newBABYLON.Scene(engine);var camera = new BABYLON.ArcRotateCamera("Camera", 3 * Math.PI / 2, Math.PI / 8, 50, BABYLON.Vector3.Zero(), scene);

camera.attachControl(canvas,true);var light = new BABYLON.HemisphericLight("hemi", new BABYLON.Vector3(0, 1, 0), scene);//Creation of a box

//(name of the box, size, scene)

var box = BABYLON.Mesh.CreateBox("box", 6.0, scene);//Creation of a sphere

//(name of the sphere, segments, diameter, scene)

var sphere = BABYLON.Mesh.CreateSphere("sphere", 10.0, 10.0, scene);//Creation of a plan

//(name of the plane, size, scene)

var plan = BABYLON.Mesh.CreatePlane("plane", 10.0, scene);//Creation of a cylinder

//(name, height, diameter, tessellation, scene, updatable)

var cylinder = BABYLON.Mesh.CreateCylinder("cylinder", 3, 3, 3, 6, 1, scene, false);//Creation of a torus

//(name, diameter, thickness, tessellation, scene, updatable)

var torus = BABYLON.Mesh.CreateTorus("torus", 5, 1, 10, scene, false);//Creation of a knot

//(name, radius, tube, radialSegments, tubularSegments, p, q, scene, updatable)

var knot = BABYLON.Mesh.CreateTorusKnot("knot", 2, 0.5, 128, 64, 2, 3, scene);//Creation of a lines mesh

var lines = BABYLON.Mesh.CreateLines("lines", [new BABYLON.Vector3(-10, 0, 0),new BABYLON.Vector3(10, 0, 0),new BABYLON.Vector3(0, 0, -10),new BABYLON.Vector3(0, 0, 10)

], scene);//Creation of a ribbon

//let's first create many paths along a maths exponential function as an example

var exponentialPath = function(p) {var path =[];for (var i = -10; i < 10; i++) {

path.push(new BABYLON.Vector3(p, i, Math.sin(p / 3) * 5 * Math.exp(-(i - p) * (i - p) / 60) + i / 3));

}returnpath;

};//let's populate arrayOfPaths with all these different paths

var arrayOfPaths =[];for (var p = 0; p < 20; p++) {

arrayOfPaths[p]=exponentialPath(p);

}//(name, array of paths, closeArray, closePath, offset, scene)

var ribbon = BABYLON.Mesh.CreateRibbon("ribbon", arrayOfPaths, false, false, 0, scene);//Moving elements

box.position = new BABYLON.Vector3(-10, 0, 0); //Using a vector

sphere.position = new BABYLON.Vector3(0, 10, 0); //Using a vector

plan.position.z = 10; //Using a single coordinate component

cylinder.position.z = -10;

torus.position.x= 10;

knot.position.y= -10;

ribbon.position= new BABYLON.Vector3(-10, -10, 20);returnscene;

}

建议调整不同的参数查看不同的效果

学到这里,我的爱人联系到我。突发奇想,写一个英文单词出来如何?

那么我就开始琢磨,就写一个[LOVE]给爱人吧。

由于本人技术拙略,就按照了以下方式处理

L:使用lines完成

O:使用torus完成

V:使用lines完成

E:适用lines完成

镜头:由上至下最好

于是便有了下面的代码

Babylon - Getting Started

}#renderCanvas{width:100%;height:100%;touch-action:none;

}

varcanvas=document.getElementById('renderCanvas');//加载巴比伦3D引擎

varengine= newBABYLON.Engine(canvas,true);//创建场景

varcreateScene= function() {//通过引擎创建基本场景

varscene= newBABYLON.Scene(engine);//创建一个开放免费的相机,地点位于x:0(横向距离), y:5(高度), z:-10(纵向距离)

varcamera= newBABYLON.FreeCamera('camera1',newBABYLON.Vector3(0,10,0), scene);//相机到场景的起源

camera.setTarget(BABYLON.Vector3.Zero());//相机放置画布

camera.attachControl(canvas,false);//创建基本光源, 目标位于 x:0,y:1,z:0 -(由天空出现)

varlight= newBABYLON.HemisphericLight('light1',newBABYLON.Vector3(0,1,0), scene);varlines=BABYLON.Mesh.CreateLines("lines", [newBABYLON.Vector3(0,0,2.5),newBABYLON.Vector3(0,0,0),newBABYLON.Vector3(1,0,0),

], scene);vartorus=BABYLON.Mesh.CreateTorus("torus",2,0.1,16, scene,false);

torus.position.x= 2.3;

torus.position.z= 1;varlines=BABYLON.Mesh.CreateLines("lines", [newBABYLON.Vector3(3.5,0,2.5),newBABYLON.Vector3(4,0,0),newBABYLON.Vector3(5,0,2.5),

], scene);varlines=BABYLON.Mesh.CreateLines("lines", [newBABYLON.Vector3(6,0,2.5),newBABYLON.Vector3(5,0,2.5),newBABYLON.Vector3(5,0,1.75),newBABYLON.Vector3(6,0,1.75),newBABYLON.Vector3(5,0,1.75),newBABYLON.Vector3(5,0,0),newBABYLON.Vector3(6,0,0),

], scene);//返回该场景

returnscene;

}//赋予该场景于变量

varscene=createScene();//在引擎中循环运行这个场景

engine.runRenderLoop(function(){

scene.render();

});//追加事件:帆布与大小调整程序

window.addEventListener('resize',function(){

engine.resize();

});

});

生成后记得左键鼠标,切换镜头。目前还没处理好镜头的初始位置

以下是看到的结果

哈哈,大功告成。这里可以发散思维完成更有趣的东西。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值