篇章 1:Three.js 新手村:Hello World

337 阅读4分钟

🏡 欢迎来到新手村

欢迎来到“Three.js 新手村”,这是一个没有交通规则、随时可能掉进3D立方体坑的小村庄。你就是那个刚搬来的小村民,手里拿着神秘的魔法棒(也就是键盘)。

Three.js 就像你的魔法工具箱,能帮你把平面世界变成炫酷的3D世界。今天,我们先学会基础魔法——Hello World!

📚 概念小课堂

Three.js 概念村庄比喻幽默描述
Scene(场景)村庄广场"这是你的小天地,想放啥就放啥,连奇怪的东西也能堆起来。"
Camera(相机)村民的眼睛"相机帮你观察村庄里的每一个角落,别让它晕头转向哦。"
Renderer(渲染器)魔法投影机"它把你的小世界投影到屏幕上,就像在看一场魔法电影。"
Mesh(网格)村民和装备"每个村民都有自己的形状和衣服(材质),想让他们炫酷就换套装备。"
Geometry(几何体)村民的骨架"这决定了村民的基本形状,高矮胖瘦都靠它定型。"
Material(材质)衣服和颜料"给村民穿上漂亮衣服,换换颜色和质感,瞬间变时尚达人。"
Light(光源)太阳、路灯"光线决定了村子里的气氛,白天黑夜全靠它调节。"
Animation(动画)村民的动作"让村民跑起来、跳起来,甚至挥舞魔法棒,场景瞬间活了。"
Texture(纹理)衣服花纹和墙面贴纸"给村民和房子加点花纹,别让他们光秃秃的,太单调了。"
Camera Controls(相机控制)村民的视角操控器"你可以让相机飞来飞去,俯视、跟随或旋转,村子里没人能逃过你的视线。"

💻 Hello World 代码示例

// 🏡 Step 1: 搭建你的小村庄
const scene = new THREE.Scene(); // 这是你的3D小天地,可以随便堆积奇怪的东西

// 👀 Step 2: 装上你的村民眼睛
const camera = new THREE.PerspectiveCamera(
  75, 
  window.innerWidth / window.innerHeight, 
  0.1, 
  1000
);
camera.position.z = 5; // 保证你不会撞到村口的房子

// 🪄 Step 3: 魔法投影机开机
const renderer = new THREE.WebGLRenderer();
renderer.setSize(window.innerWidth, window.innerHeight);
document.body.appendChild(renderer.domElement); // 把村子投到你的屏幕上

// 🏠 Step 4: 建个小房子给村民住
const geometry = new THREE.BoxGeometry(); // 小立方体,基础房屋
const material = new THREE.MeshBasicMaterial({ color: 0x00ff00 }); // 给房子刷上绿色油漆
const cube = new THREE.Mesh(geometry, material);
scene.add(cube); // 把房子放进村子里

// 🎢 Step 5: 开始魔法循环,让村子动起来
function animate() {
  requestAnimationFrame(animate); // 这个魔法永不停歇
  cube.rotation.x += 0.01; // 房子缓缓自转,像在跳舞
  cube.rotation.y += 0.01; 
  renderer.render(scene, camera); // 把变化展现在你的眼睛里
}

animate(); // 启动魔法循环,祝你在村子里玩得开心!

🌟 Three.js 小村庄概念解释

概念代码示例新手易混点幽默说明 / 比喻
Sceneconst scene = new THREE.Scene();很多人不懂 Scene 是干嘛的🏡 小村庄:你的 3D 世界,墙、树、房子、怪物都能放进去
PerspectiveCameraconst camera = new THREE.PerspectiveCamera(75, window.innerWidth / window.innerHeight, 0.1, 1000);FOV、宽高比、近远裁剪面参数👀 村民眼睛:帮你看村子里的所有东西,75 是视角,0.1-1000 是可视范围
Camera Positioncamera.position.z = 5;新手不懂 z 轴位置📏 拉开距离:站在村口,不然房子会挡住视线
WebGLRendererconst renderer = new THREE.WebGLRenderer();renderer 和 canvas 的关系🪄 魔法投影机:把村子投射到屏幕上
Renderer Sizerenderer.setSize(window.innerWidth, window.innerHeight);大小与浏览器窗口关系🖥️ 适配屏幕:投影机尺寸要和屏幕一样,画面不变形
Append Rendererdocument.body.appendChild(renderer.domElement);DOM 放置位置📌 安放投影机:把 canvas 放到页面里才能看到村子
BoxGeometryconst geometry = new THREE.BoxGeometry();Geometry 概念🏠 房子的骨架:定义形状和大小
MeshBasicMaterialconst material = new THREE.MeshBasicMaterial({ color: 0x00ff00 });Material 和 Geometry 关系🎨 刷油漆:给房子加颜色或材质
Meshconst cube = new THREE.Mesh(geometry, material);Mesh 是干嘛👷 居民房子:把形状和材质结合,才能放进村子里
Add to Scenescene.add(cube);-放进村子:没有 add,看不到你的房子
Animation Loopfunction animate() { requestAnimationFrame(animate); cube.rotation.x += 0.01; cube.rotation.y += 0.01; renderer.render(scene, camera);} animate();和 setInterval 区别🎢 魔法循环:浏览器每帧刷新村子画面,比定时器更流畅
Cube Rotationcube.rotation.x += 0.01; cube.rotation.y += 0.01;-🔄 让房子跳舞:旋转房子,让村子动起来
Renderrenderer.render(scene, camera);渲染顺序🎬 开拍:把 Scene + Camera 的画面画出来,每帧都要 render

🎉 恭喜你,已经成功在 Three.js 新手村里搭好了你的第一个 “房子”🏠,看到了绿色的旋转立方体在你眼前欢快地跳舞💃。别小看这个 Hello World,它可不是随便画个方块——你已经掌握了 Scene🌳Camera👀Renderer🪄Mesh🏗️ 这些村民的日常工作方式!

下一步,我们就要带着你的村庄升级:给它加点 “魔法光源🌟”、让房子动起来🔄、甚至召唤 村民(几何体👾) 自由活动。准备好了吗?Three.js 的世界比你想象的还要大,魔法与奇遇在前方等你!

💡 记住:每一个旋转的立方体,都是你踏入 3D 世界的第一步。别害怕踩坑——村民们都很友好,只要你敢尝试,村子就会活起来!


彩蛋提示:下一个篇章,我们将开启 “光影魔法🪄” 模式——不仅房子会动,光线也会跟着你的小手势跳舞!快去准备你的魔法手套🧤,村庄升级就等你了~