前言
创建场景七大步
第一步: 引入在线的babylon包 :
<script src="https://cdn.babylonjs.com/babylon.js"></script>
第二步:创建一个容器:
<canvas id="renderCanvas"></canvas>
第三步:样式
<style>
html,
body {
overflow: hidden;
width: 100%;
height: 100%;
margin: 0;
padding: 0;
}
#renderCanvas {
width: 100%;
height: 100%;
touch-action: none;
}
</style>
第四步:获取到canvas的dom对象:😀😀固定写法
var canvas = document.getElementById("renderCanvas");
第五步:实例化3d引擎😀😀固定写法
var engine = new BABYLON.Engine(canvas, true);
第六步:创建场景并返回场景对象(场景包含有 场景(Scene),相机(FreeCamera),灯光(HemisphericLight)、绘制(CreateSphere),地面(CreateGround),)🥰🥰🥰这个地方很关键
var createScene = function () {
// 创建场景对象
var scene = new BABYLON.Scene(engine);
// 创建FreeCamera, 并把相机位置设置到(x:0, y:5, z:-10)
var camera = new BABYLON.FreeCamera("camera1",
new BABYLON.Vector3(0, 5, -10), scene);
// 将相机朝向设置到原点
camera.setTarget(BABYLON.Vector3.Zero());
// 相机事件绑定到canvas对象上面
camera.attachControl(canvas, true);
// 创建一个平衡光,将灯光位置设置到0 1 0
var light = new BABYLON.HemisphericLight("light",
new BABYLON.Vector3(0, 1, 0), scene);
// 把灯光 0-1
light.intensity = 0.7;
// 创建一个球题 支持六个配置项 名称, 分割段数, 直径, 放置的场景, updatable, sideOrientation
var sphere = BABYLON.Mesh.CreateSphere('sphere1', 16, 2, scene);
// 将球上调到原点以上
sphere.position.y = 0.1;
// 创建一个自定义的地面
var myGround = BABYLON.MeshBuilder.CreateGround("myGround", {width: 6, height: 4, subdivsions: 4}, scene);//subdivsions:将地面分成的几块
// 返回场景
return scene;
};
第六步:获取到创建的场景并渲染出来😀😀固定写法
var scene = createScene(); //获取到创建的场景
// 循环渲染,性能最大没秒六十帧
engine.runRenderLoop(function () {
scene.render();
});
第七步:浏览器大小变动时,触发引擎的重载状态😀😀固定写法
window.addEventListener("resize", function () {
engine.resize();
});
1、绘制一个小球
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>创建基础的模型</title>
<style>
* {
padding: 0;
margin: 0;
width: 100%;
height: 100%;
overflow: hidden;
}
#idcanvas {
width: 100%;
height: 100%;
/* 禁用元素上的所有手势 */
touch-action: none;
}
</style>
</head>
<body>
<script src="https://cdn.babylonjs.com/babylon.js"></script>
<canvas id="idcanvas"></canvas>
</body>
<script>
// 1-获取canvas 的dom对象
var canvas = document.querySelector('#idcanvas');
// console.log(canvas,'111111');
// 2-实例化3d引擎
var engine = new BABYLON.Engine(canvas, true);
// console.log(engine,'222');
// 3-创建场景并返回场景对象
var createScene = function () {
// 3-1 创建场景对象---(把实例化3d引擎放入里边)
var scene = new BABYLON.Scene(engine)
// 3-2 创建相机(FreeCamera),并把相机位置设置到(x:0,y:5,z:-10) new BABYLON.Vector3(x, y, z)的对象来表示模型网格的位置、旋转以及缩放
var camera = new BABYLON.FreeCamera('camera1', new BABYLON.Vector3(0, 5, -10), scene)
// 3-3 :将相机朝向设置到原点
camera.setTarget(BABYLON.Vector3.Zero());
// 3-4:相机事件绑定到canvas对象上面
camera.attachControl(canvas, true);
// 3-5 :创建灯光,灯光为止设置到 0 1 0
var light = new BABYLON.HemisphericLight("light", new BABYLON.Vector3(0, 1, 0), scene);
// 灯光调暗一点 0-1范围之间
light.intensity = 0.7;
// 3-6 绘制一个球,支持六个配置项 名称, 分割段数, 直径, 放置的场景, updatable,sideOrientation
var sphere = new BABYLON.Mesh.CreateSphere("sphere1",16,2,scene);
// 调高一点
sphere.position.y = 2;
// 3-7 创建一个自定义的地面
var myGround = BABYLON.MeshBuilder.CreateGround("myGround", { width: 6, height: 4, subdivsions: 4 }, scene)//化悲愤度暖白分成几块
// 3-8 返回场景
return scene;
}
// 4- 获取到创建的场景
var scene = createScene();
// 4-1 循环渲染,性能最大每秒60帧
engine.runRenderLoop(function () {
scene.render();
})
// 5- 浏览器大小变动时,触发引擎的重载状态
window.addEventListener("resize", function () {
engine.resize();
})
engine
</script>
</html>
2-绘制一个正方形 box.position.y = 2 设置模型高低
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>创建基础的模型</title>
<style>
* {
padding: 0;
margin: 0;
width: 100%;
height: 100%;
overflow: hidden;
}
#idcanvas {
width: 100%;
height: 100%;
/* 禁用元素上的所有手势 */
touch-action: none;
}
</style>
</head>
<body>
<script src="https://cdn.babylonjs.com/babylon.js"></script>
<canvas id="idcanvas"></canvas>
</body>
<script>
// 1-获取canvas 的dom对象
var canvas = document.querySelector('#idcanvas');
// console.log(canvas,'111111');
// 2-实例化3d引擎
var engine = new BABYLON.Engine(canvas, true);
// console.log(engine,'222');
// 3-创建场景并返回场景对象
var createScene = function () {
// 3-1 创建场景对象---(把实例化3d引擎放入里边)
var scene = new BABYLON.Scene(engine)
// 3-2 创建相机(FreeCamera),并把相机位置设置到(x:0,y:5,z:-10) new BABYLON.Vector3(x, y, z)的对象来表示模型网格的位置、旋转以及缩放
var camera = new BABYLON.FreeCamera('camera1', new BABYLON.Vector3(0, 5, -10), scene)
// 3-3 :将相机朝向设置到原点
camera.setTarget(BABYLON.Vector3.Zero());
// 3-4:相机事件绑定到canvas对象上面
camera.attachControl(canvas, true);
// 3-5 :创建灯光,灯光为止设置到 0 1 0
var light = new BABYLON.HemisphericLight("light", new BABYLON.Vector3(0, 1, 0), scene);
// 灯光调暗一点 0-1范围之间
light.intensity = 0.7;
// 3-6-1 绘制正方形
var box = BABYLON.MeshBuilder.CreateBox("BOX", {}, scene);
box.position.y = 2
// 3-7 创建一个自定义的地面
var myGround = BABYLON.MeshBuilder.CreateGround("myGround", { width: 6, height: 4, subdivsions: 4 }, scene)//化悲愤度暖白分成几块
// 3-8 返回场景
return scene;
}
// 4- 获取到创建的场景
var scene = createScene();
// 4-1 循环渲染,性能最大每秒60帧
engine.runRenderLoop(function () {
scene.render();
})
// 5- 浏览器大小变动时,触发引擎的重载状态
window.addEventListener("resize", function () {
engine.resize();
})
engine
</script>
</html>
3-设置一个平面
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>创建基础的模型</title>
<style>
* {
padding: 0;
margin: 0;
width: 100%;
height: 100%;
overflow: hidden;
}
#idcanvas {
width: 100%;
height: 100%;
/* 禁用元素上的所有手势 */
touch-action: none;
}
</style>
</head>
<body>
<script src="https://cdn.babylonjs.com/babylon.js"></script>
<canvas id="idcanvas"></canvas>
</body>
<script>
// 1-获取canvas 的dom对象
var canvas = document.querySelector('#idcanvas');
// console.log(canvas,'111111');
// 2-实例化3d引擎
var engine = new BABYLON.Engine(canvas, true);
// console.log(engine,'222');
// 3-创建场景并返回场景对象
var createScene = function () {
// 3-1 创建场景对象---(把实例化3d引擎放入里边)
var scene = new BABYLON.Scene(engine)
// 3-2 创建相机(FreeCamera),并把相机位置设置到(x:0,y:5,z:-10) new BABYLON.Vector3(x, y, z)的对象来表示模型网格的位置、旋转以及缩放
var camera = new BABYLON.FreeCamera('camera1', new BABYLON.Vector3(0, 5, -10), scene)
// 3-3 :将相机朝向设置到原点
camera.setTarget(BABYLON.Vector3.Zero());
// 3-4:相机事件绑定到canvas对象上面
camera.attachControl(canvas, true);
// 3-5 :创建灯光,灯光为止设置到 0 1 0
var light = new BABYLON.HemisphericLight("light", new BABYLON.Vector3(0, 1, 0), scene);
// 灯光调暗一点 0-1范围之间
light.intensity = 0.7;
// 3-6-4 绘制一个配置项的平面
var myplane = BABYLON.MeshBuilder.CreatePlane("myplane",{width:5,height:2,},scene);
var sourcePlane = new BABYLON.Plane(0,0,1);
sourcePlane.normalize();
myplane.position.y = 3
// 3-7 创建一个自定义的地面
var myGround = BABYLON.MeshBuilder.CreateGround("myGround", { width: 6, height: 4, subdivsions: 4 }, scene)//化悲愤度暖白分成几块
// 3-8 返回场景
return scene;
}
// 4- 获取到创建的场景
var scene = createScene();
// 4-1 循环渲染,性能最大每秒60帧
engine.runRenderLoop(function () {
scene.render();
})
// 5- 浏览器大小变动时,触发引擎的重载状态
window.addEventListener("resize", function () {
engine.resize();
})
engine
</script>
</html>