返回

从Three.js视角探索几何体的奥秘

前端







几何体是Three.js的基础构建模块,用于创建3D模型和场景。它们本质上是threejs生成顶点的算法,这些顶点构成了几何体的形状。在Three.js中,几何体由一系列属性组成,包括顶点位置、法线、纹理坐标和索引。

Three.js提供了多种内置几何体,包括球体、立方体、圆柱体、圆锥体等。这些几何体可以通过简单的函数调用来创建。例如,创建一个球体,可以使用以下代码:

const geometry = new THREE.SphereGeometry(5, 32, 32);


这段代码创建一个半径为5个单位的球体,并使用32个纬度和32个经度分段来细分球体。

除了内置几何体之外,Three.js还允许你创建自定义几何体。为此,你需要创建一个几何体类并重写其```generateVertices```方法。```generateVertices```方法负责生成几何体的顶点。

例如,创建一个自定义的立方体,可以使用以下代码:

class CustomCubeGeometry extends THREE.Geometry {

constructor() {

super();

this.vertices = [
  // 前面
  new THREE.Vector3(-1, -1,  1),
  new THREE.Vector3( 1, -1,  1),
  new THREE.Vector3( 1,  1,  1),
  new THREE.Vector3(-1,  1,  1),

  // 后面
  new THREE.Vector3(-1, -1, -1),
  new THREE.Vector3(-1,  1, -1),
  new THREE.Vector3( 1,  1, -1),
  new THREE.Vector3( 1, -1, -1),

  // 上面
  new THREE.Vector3(-1,  1,  1),
  new THREE.Vector3( 1,  1,  1),
  new THREE.Vector3( 1,  1, -1),
  new THREE.Vector3(-1,  1, -1),

  // 下面
  new THREE.Vector3(-1, -1, -1),
  new THREE.Vector3(-1, -1,  1),
  new THREE.Vector3( 1, -1,  1),
  new THREE.Vector3( 1, -1, -1),

  // 左面
  new THREE.Vector3(-1, -1, -1),
  new THREE.Vector3(-1, -1,  1),
  new THREE.Vector3(-1,  1,  1),
  new THREE.Vector3(-1,  1, -1),

  // 右面
  new THREE.Vector3( 1, -1, -1),
  new THREE.Vector3( 1, -1,  1),
  new THREE.Vector3( 1,  1,  1),
  new THREE.Vector3( 1,  1, -1)
];

this.faces = [
  // 前面
  new THREE.Face3(0, 1, 2),
  new THREE.Face3(2, 3, 0),

  // 后面
  new THREE.Face3(4, 5, 6),
  new THREE.Face3(6, 7, 4),

  // 上面
  new THREE.Face3(8, 9, 10),
  new THREE.Face3(10, 11, 8),

  // 下面
  new THREE.Face3(12, 13, 14),
  new THREE.Face3(14, 15, 12),

  // 左面
  new THREE.Face3(16, 17, 18),
  new THREE.Face3(18, 19, 16),

  // 右面
  new THREE.Face3(20, 21, 22),
  new THREE.Face3(22, 23, 20)
];

this.computeFaceNormals();

}

}


这段代码创建了一个自定义的立方体几何体,该几何体由24个顶点和12个面组成。

一旦你创建了一个几何体,你就可以使用它来创建一个网格对象。网格对象是几何体和材质的组合。材质定义了网格对象的表面外观。

例如,创建一个网格对象,可以使用以下代码:

const material = new THREE.MeshLambertMaterial({color: 0xff0000});
const mesh = new THREE.Mesh(geometry, material);


这段代码创建一个红色的网格对象。

现在,你就可以将网格对象添加到场景中。场景是Three.js中包含所有对象的容器。

例如,创建一个场景,可以使用以下代码:

const scene = new THREE.Scene();


现在,你可以将网格对象添加到场景中:

scene.add(mesh);


最后,你需要创建一个渲染器来将场景渲染到画布上。渲染器将把场景中的对象转换为2D图像。

例如,创建一个渲染器,可以使用以下代码:

const renderer = new THREE.WebGLRenderer();
renderer.setSize(window.innerWidth, window.innerHeight);
document.body.appendChild(renderer.domElement);


现在,你可以使用渲染器将场景渲染到画布上:

renderer.render(scene);


通过以上步骤,你就可以使用Three.js创建3D模型和场景。