Babylon.js学习之路《三、创建你的第一个 3D 场景:立方体、球体与平面》

发布于:2025-05-13 ⋅ 阅读:(13) ⋅ 点赞:(0)

在这里插入图片描述


1. 引言:从零构建一个 3D 场景

上一章简单介绍了项目中如何引入Babylon.js,并且举例创建了一个正方形的代码。
这一章详细介绍一下Babylon创建不同形状物体的功能。

1.1 目标与成果预览

  • 最终效果:在浏览器中展示包含立方体、球体、平面的交互式场景,可旋转/缩放视角。
  • 核心知识点:场景初始化、几何体创建、坐标系理解、基础交互。

1.2 前置条件

  • 已完成开发环境配置(参考前一篇文章)。
  • 基础 HTML/JavaScript 语法熟悉。

2. 初始化 Babylon.js 场景

2.1 创建 HTML 骨架

  <!DOCTYPE html>
  <html>
	  <head>
	    <title>第一个 3D 场景</title>
	    <script src="https://cdn.babylonjs.com/babylon.js"></script>
	  </head>
	  <body>
	    <canvas id="renderCanvas"></canvas>
	    <script src="app.js"></script>
	  </body>
  </html>

2.2 初始化引擎与场景

在这里插入图片描述

  // app.js
  const canvas = document.getElementById("renderCanvas");
  const engine = new BABYLON.Engine(canvas, true); // 初始化引擎
  const createScene = () => {
    const scene = new BABYLON.Scene(engine);
    // 添加相机
    const camera = new BABYLON.ArcRotateCamera(
      "camera", 
      -Math.PI/2, Math.PI/2.5, 10, 
      new BABYLON.Vector3(0, 0, 0), 
      scene
    );
    camera.attachControl(canvas, true);
    // 添加光源
    const light = new BABYLON.HemisphericLight(
      "light", 
      new BABYLON.Vector3(0, 1, 0), 
      scene
    );
    return scene;
  };
  const scene = createScene();
  engine.runRenderLoop(() => scene.render());

此时成功创建了Babylon场景,由于没有任何模型,此时场景看起来空空荡荡的。


3. 创建基础几何体

在这里插入图片描述

3.1 立方体(Box)

  • 代码实现
    const box = BABYLON.MeshBuilder.CreateBox(
      "box", 
      { 
        size: 2,          // 边长
        height: 3,        // 单独设置高度(覆盖 size)
        faceColors: [     // 每个面的颜色(可选)
          new BABYLON.Color4(1,0,0,1), // 前面红色
          new BABYLON.Color4(0,1,0,1), // 背面绿色
          // ... 其他面
        ]
      }, 
      scene
    );
    box.position = new BABYLON.Vector3(-3, 0, 0); // 设置位置
  • 关键参数解析
    • size:统一尺寸,或通过 width/height/depth 单独设置。
    • faceColors:为立方体每个面指定颜色(需启用 hasVertexAlpha)。

添加创建长方体的代码后,场景中成功添加一个符合我们参数的模型:边长为2,高度为3,六个面包含多个颜色。

3.2 球体(Sphere)

在这里插入图片描述

  • 代码实现
    const sphere = BABYLON.MeshBuilder.CreateSphere(
      "sphere", 
      { 
        diameter: 2,     // 直径
        segments: 32      // 细分面数(影响光滑度)
      }, 
      scene
    );
    sphere.position = new BABYLON.Vector3(0, 0, 0);
  • 关键参数解析
    • segments:值越大球体越光滑,性能消耗越高。

与长方体的代码相似,通过BABYLON.MeshBuilder.CreateSphere函数成功添加了一个球体,属性可以配置

3.3 平面(Plane)

在这里插入图片描述

  • 代码实现
    const plane = BABYLON.MeshBuilder.CreatePlane(
      "plane", 
      { 
        size: 5, 
        sideOrientation: BABYLON.Mesh.DOUBLESIDE // 双面渲染
      }, 
      scene
    );
    plane.position = new BABYLON.Vector3(3, 0, 0);
    plane.rotation.x = Math.PI/2; // 旋转为水平面
  • 关键参数解析
    • sideOrientation:默认为单面渲染,设置为 DOUBLESIDE 可双面可见。

3.4 其他基础几何体(快速预览)

  • 圆柱体(CreateCylinder)、圆锥体(CreateCylinder 调整参数)、地面(CreateGround)。
  • 这里不再赘述,可以通过Babylon提供的API自己动手尝试,亲自动手实践才能印象更深。

4. 调整物体属性

4.1 位置、旋转与缩放

在这里插入图片描述

  • 坐标系系统:右手坐标系(X右,Y上,Z向前)。
  • 代码操作
    box.position = new BABYLON.Vector3(2, 1, -3); // 位置
    box.rotation = new BABYLON.Vector3(0, Math.PI/4, 0); // 弧度制旋转
    box.scaling = new BABYLON.Vector3(1, 2, 1); // 缩放

4.2 父子层级关系

在这里插入图片描述

  • 将物体附加到另一个物体,实现联动
    sphere.parent = box; // 球体随立方体移动/旋转

此时球体的中心会自动定位到长方体的中心,两者会联动


5. 总结与下一章预告

5.1 关键知识点回顾

  • 立方体、球体、平面创建
  • 调整物体的位置、旋转与缩放
  • 父子层级关系

5.2 下一章预告

  • 《Babylon.js 中的相机(Camera)与视角控制》:详解自由相机、弧形旋转相机、跟随相机等类型及交互配置。