Three.js基础入门教程:从零开始创建3D立方体

Three.js基础入门教程:从零开始创建3D立方体

three.js JavaScript 3D Library. three.js 项目地址: https://gitcode.com/gh_mirrors/th/three.js

Three.js是一个强大的JavaScript 3D库,它让开发者能够轻松地在网页上创建和展示3D内容。本教程将带你了解Three.js的基础知识,并教你如何创建一个简单的3D立方体场景。

准备工作

在开始之前,你需要准备一个HTML文件,并添加一个canvas元素作为Three.js的渲染容器:

<body>
  <canvas id="c"></canvas>
</body>

初始化Three.js

首先,我们需要导入Three.js库并设置基本的渲染器:

import * as THREE from 'three';

function main() {
  const canvas = document.querySelector('#c');
  const renderer = new THREE.WebGLRenderer({
    antialias: true,
    canvas
  });
  // 其他代码...
}

这里有几个关键点需要注意:

  • 我们使用type="module"的script标签来支持ES6模块
  • WebGLRenderer是Three.js的核心渲染器,负责将3D场景绘制到canvas上
  • antialias: true参数启用了抗锯齿功能,使边缘更加平滑

创建相机

3D场景需要一个相机来定义观察视角:

const fov = 75; // 视野角度(垂直方向)
const aspect = 2; // 画布宽高比
const near = 0.1; // 近裁剪面
const far = 5; // 远裁剪面
const camera = new THREE.PerspectiveCamera(fov, aspect, near, far);
camera.position.z = 2; // 将相机向后移动

相机参数解释:

  • fov(Field of View):视野范围,单位是度
  • aspect:画布的宽高比
  • nearfar:定义了渲染的深度范围,超出这个范围的物体不会被渲染

创建场景和立方体

接下来,我们创建一个场景和一个立方体:

const scene = new THREE.Scene();

// 创建立方体几何体
const boxWidth = 1;
const boxHeight = 1;
const boxDepth = 1;
const geometry = new THREE.BoxGeometry(boxWidth, boxHeight, boxDepth);

// 创建基础材质
const material = new THREE.MeshBasicMaterial({color: 0x44aa88});

// 创建网格对象(几何体+材质)
const cube = new THREE.Mesh(geometry, material);

// 将立方体添加到场景中
scene.add(cube);

渲染场景

最后,我们渲染场景:

renderer.render(scene, camera);

添加动画

为了让立方体动起来,我们可以使用requestAnimationFrame创建一个动画循环:

function render(time) {
  time *= 0.001; // 将时间转换为秒
  
  cube.rotation.x = time;
  cube.rotation.y = time;
  
  renderer.render(scene, camera);
  
  requestAnimationFrame(render);
}
requestAnimationFrame(render);

添加光照效果

为了使3D效果更明显,我们可以添加光照并使用响应光照的材质:

// 添加平行光
const color = 0xFFFFFF;
const intensity = 3;
const light = new THREE.DirectionalLight(color, intensity);
light.position.set(-1, 2, 4);
scene.add(light);

// 使用Phong材质替代基础材质
const material = new THREE.MeshPhongMaterial({color: 0x44aa88});

创建多个立方体

我们可以扩展代码来创建多个立方体:

function makeInstance(geometry, color, x) {
  const material = new THREE.MeshPhongMaterial({color});
  const cube = new THREE.Mesh(geometry, material);
  scene.add(cube);
  cube.position.x = x;
  return cube;
}

const cubes = [
  makeInstance(geometry, 0x44aa88, 0),
  makeInstance(geometry, 0x8844aa, -2),
  makeInstance(geometry, 0xaa8844, 2)
];

function render(time) {
  time *= 0.001;
  
  cubes.forEach((cube, ndx) => {
    const speed = 1 + ndx * 0.1;
    const rot = time * speed;
    cube.rotation.x = rot;
    cube.rotation.y = rot;
  });
  
  renderer.render(scene, camera);
  requestAnimationFrame(render);
}

总结

通过本教程,你学会了:

  1. 如何设置Three.js的基本环境
  2. 创建相机、场景和3D物体
  3. 添加动画使场景生动起来
  4. 使用光照增强3D效果
  5. 创建和管理多个3D对象

Three.js提供了丰富的功能和API,这只是入门的第一步。随着深入学习,你将能够创建更复杂、更精美的3D场景和交互体验。

three.js JavaScript 3D Library. three.js 项目地址: https://gitcode.com/gh_mirrors/th/three.js

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

芮妍娉Keaton

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值