第一章:环境搭建与基础
各位同学,欢迎来到《3D数据可视化从入门到精通》的第一课。
说实话,我见过太多人一上来就急着写代码,结果环境没配好,折腾半天连个立方体都显示不出来。我自己刚学Three.js那会儿,也踩过不少坑。所以这一章,咱们先把地基打牢。
1.1 Node.js与npm安装
Three.js项目依赖Node.js环境。为什么?因为我们需要用npm来管理第三方库。
我个人习惯用LTS版本,稳定,不容易出幺蛾子。去官网下载安装包,一路下一步就行。
node -v
npm -v
如果能看到版本号,比如 v18.16.0 和 9.5.1,那就说明装好了。
npm install -g npm@latest 升级到最新版。
1.2 VS Code配置
编辑器我推荐VS Code,免费、轻量、插件生态好。你想想看,一个编辑器能搞定前端、后端、甚至3D开发,多省事。
装好之后,我建议你安装这几个插件:
- Live Server —— 启动本地服务器,实时刷新页面
- ESLint —— 检查代码规范,避免低级错误
- Prettier —— 自动格式化代码,保持风格统一
- JavaScript (ES6) code snippets —— 快速补全代码
嗯,这里要注意:Live Server 是必须的。因为Three.js加载本地文件时,直接双击HTML文件会报跨域错误。用Live Server启动就没事。
1.3 创建第一个Three.js项目
好,环境准备好了。咱们来写第一个项目。
打开终端,创建一个新文件夹:
mkdir my-first-threejs
cd my-first-threejs
npm init -y
然后安装Three.js:
npm install three
安装完成后,你会看到 node_modules 文件夹和 package.json 文件。这说明依赖已经拉下来了。
接下来,在项目根目录创建一个 index.html 文件:
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>我的第一个Three.js项目</title>
<style>
body { margin: 0; overflow: hidden; }
</style>
</head>
<body>
<script type="importmap">
{
"imports": {
"three": "https://unpkg.com/three@0.160.0/build/three.module.js"
}
}
</script>
<script type="module">
import * as THREE from 'three';
// 场景
const scene = new THREE.Scene();
// 相机
const camera = new THREE.PerspectiveCamera(75, window.innerWidth / window.innerHeight, 0.1, 1000);
camera.position.z = 5;
// 渲染器
const renderer = new THREE.WebGLRenderer();
renderer.setSize(window.innerWidth, window.innerHeight);
document.body.appendChild(renderer.domElement);
// 立方体
const geometry = new THREE.BoxGeometry(1, 1, 1);
const material = new THREE.MeshBasicMaterial({ color: 0x00ff00 });
const cube = new THREE.Mesh(geometry, material);
scene.add(cube);
// 动画循环
function animate() {
requestAnimationFrame(animate);
cube.rotation.x += 0.01;
cube.rotation.y += 0.01;
renderer.render(scene, camera);
}
animate();
</script>
</body>
</html>
用VS Code打开这个文件,右键选择「Open with Live Server」。浏览器里应该出现一个旋转的绿色立方体。
1.4 理解三大核心
咱们来拆解一下刚才的代码。说白了,Three.js就是一台虚拟的3D摄像机。
场景(Scene)
场景就是一个容器。你把所有东西——模型、灯光、粒子——都放进去。它本身不渲染任何东西,只是负责管理。
我刚开始学的时候,总把场景和渲染器搞混。记住:场景是「内容」,渲染器是「输出设备」。
相机(Camera)
相机决定了你从哪个角度看场景。Three.js提供了好几种相机,最常用的是 PerspectiveCamera(透视相机)。
它的构造函数有四个参数:
| 参数 | 说明 | 我的建议 |
|---|---|---|
| fov | 视野角度(度) | 一般用45-75,太宽会变形 |
| aspect | 宽高比 | 通常用 window.innerWidth / window.innerHeight |
| near | 近裁剪面 | 0.1 就够用,太小会有深度冲突 |
| far | 远裁剪面 | 1000 够用,太大影响性能 |
渲染器(Renderer)
渲染器负责把场景和相机的内容「画」到屏幕上。最常用的是 WebGLRenderer。
它有几个重要设置:
setSize()—— 设置渲染尺寸,通常和窗口一样大setPixelRatio()—— 适配高清屏,建议设为window.devicePixelRatiodomElement—— 渲染输出的canvas元素,要添加到页面中
你想想看,如果没有渲染器,场景和相机就只是内存里的数据,我们根本看不到。渲染器就是那个「把数据变成图像」的桥梁。
1.5 动画循环
最后说说动画循环。为什么用 requestAnimationFrame?
因为它能保证动画在浏览器刷新时执行,不会浪费CPU。而且当页面切换到后台时,它会自动暂停,省电又省资源。
我见过有人用 setInterval 做动画,结果页面切出去再切回来,动画卡成PPT。所以,记住:Three.js的动画,永远用 requestAnimationFrame。
好了,第一章的内容就到这里。环境搭好了,第一个项目跑起来了,三大核心也理解了。下一章,咱们开始玩点真正的3D数据可视化。
公众号:蓝海资料掘金营,微信deep3321