// 引入three.js
import * as THREE from 'three';
npm安装后,如何引入three.js其他扩展库:
除了three.js核心库以外,在threejs文件包中examples/jsm目录下,你还可以看到各种不同功能的扩展库。
一般来说,你项目用到那个扩展库,就引入那个,用不到就不需要引入。
// 引入扩展库OrbitControls.js
import { OrbitControls } from 'three/addons/controls/OrbitControls.js';
// 引入扩展库GLTFLoader.js
import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js';
// 扩展库引入——旧版本,比如122, 新版本路径addons替换了examples/jsm
import { OrbitControls } from 'three/examples/jsm/controls/OrbitControls.js';
1.2 Three.js 目录简介
下载three.js文件包解压后,你可以看到如下目录(不同版本会略有差异)。
对于开发者而言,大家经常接触的是文档docs和案例examples两个文件夹,平时查看文档,可以打开文档docs里面html文件,案例examples里面提供了海量threejs功能案例。
three.js-master
└───build——src目录下各个代码模块打包后的结果
│───three.js——开发的时候.html文件中要引入的threejs引擎库,和引入jquery一样,可以辅助浏览器调试
│───three.min.js——three.js压缩后的结构文件体积更小,可以部署项目的时候在.html中引入。
└───docs——Three.js API文档文件
│───index.html——打开该文件可以实现离线查看threejs API文档
└───editor——Three.js的可视化编辑器,可以编辑3D场景
│───index.html——打开应用程序
└───docs——Three.js API文档文件
│───index.html——打开该文件可以实现离线查看threejs API文档
└───examples——里面有大量的threejs案例,平时可以通过代码编辑全局查找某个API、方法或属性来定位到一个案例
└───src——Three.js引擎的各个模块,可以通过阅读源码深度理解threejs引擎
│───index.html——打开该文件可以实现离线查看threejs API文档
└───utils——一些辅助工具
│───\utils\exporters\blender——blender导出threejs文件的插件
2. 环境搭建
2.1 创建一个HTML文件
首先,创建一个名为index.html
的HTML文件。然后,在文件中添加以下基本HTML结构:
<!DOCTYPE html>
<html lang="en">
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Three.js环境搭建</title>
<style>
body { margin: 0; }
canvas { display: block; }
</style>
</head>
<script src="https://cdnjs.cloudflare.com/ajax/libs/three.js/r128/three.min.js"></script>
<script src="main.js"></script>
</body>
</html>
在这个HTML文件中,我们加载了Three.js库,并通过main.js
文件链接了我们即将编写的脚本。
2.2 创建一个JavaScript文件
接下来,创建一个名为main.js
的JavaScript文件。在这个文件中,我们将编写Three.js代码来创建一个基本的3D场景。
2.2.1 初始化Three.js
在main.js
文件中,添加以下代码以初始化Three.js:
// 创建一个场景
const scene = new THREE.Scene();
// 创建一个透视相机
const camera = new THREE.PerspectiveCamera(75, window.innerWidth / window.innerHeight, 0.1, 1000);
// 创建一个WebGL渲染器
const renderer = new THREE.WebGLRenderer();
renderer.setSize(window.innerWidth, window.innerHeight);
document.body.appendChild(renderer.domElement);
// 添加窗口尺寸调整事件监听器
window.addEventListener('resize', function() {
const width = window.innerWidth;
const height = window.innerHeight;
renderer.setSize(width, height);
camera.aspect = width / height;
camera.updateProjectionMatrix();
这段代码创建了一个场景、一个透视相机和一个WebGL渲染器。同时,我们还添加了一个事件监听器,用于处理窗口尺寸变化,以确保渲染的场景始终适应浏览器窗口大小。
2.2.2 添加一个立方体
接下来,我们将在场景中添加一个简单的立方体。将以下代码添加到main.js
文件: