我的3D和Three.js入门笔记(1)

举报
yd_289006361 发表于 2026/09/19 22:17:49 2026/09/19
【摘要】 电脑里的 3D 模型,不是”一块一块的砖”,而是一堆极其细小的三角形。就像:像素画不是一笔一画画的,而是一个个小方格涂出来的。3D 模型不是捏出来的,而是一堆小三角形拼出来的。你平时刷到的”低模”角色(比如我们项目里这个人物)其实皮肤、衣服、剑,全是三角形拼的。1.2 从最小的积木开始:点 → 线 → 三角形在 3D 的世界里,往下拆,只有三样东西:顶点Vertex(复数 Vertices)...

电脑里的 3D 模型,不是”一块一块的砖”,而是一堆极其细小的三角形。就像:
像素画不是一笔一画画的,而是一个个小方格涂出来的。3D 模型不是捏出来的,而是一堆小三角形拼出来的。
你平时刷到的”低模”角色(比如我们项目里这个人物)其实皮肤、衣服、剑,全是三角形拼的。


1.2 从最小的积木开始:点 → 线 → 三角形
在 3D 的世界里,往下拆,只有三样东西:

  1. 顶点Vertex(复数 Vertices)一个空间中的点,有坐标 (x, y, z),地图上的一个坐标点
  2. 边 Edge,两个顶点之间的连线, 两点之间的路
  3. 面,Face,三个顶点围成的三角形,用三根树枝搭的三角架

为什么一定要是三角形?
因为三条边能确定一个平面,而我们肉眼看到的三维物体表面,就是无数个小平面拼出来的。
• 四个点不一定在同一平面(比如桌子的四个脚可能不在同一平面),渲染时会有缝隙;
• 但三个点永远共面,所以三角形是最可靠、最通用的”面”。


所以工业界约定:一切表面最终都拆成三角形再交给显卡。这个动作叫”三角化”(triangulation)。


一个立方体,用 8 个顶点就能描述。但要”填满”它的六个面,需要 12 个三角形(每个面拆成 2 个三角形)。
一堆顶点 + 一堆三角形,合在一起,就叫网格(Mesh)


网格(Mesh) 这个词你以后会天天见。在 Three.js 里,一个”模型”就是一个 Mesh 对象,它里面装着:
• geometry(几何):顶点的坐标列表 + 三角形的索引列表
• material(材质):这个物体表面看起来像什么(颜色、光滑还是粗糙)

一句话记住:Mesh = 顶点的形状(geometry)+ 表面的样子(material)。



看明白这个,你就理解了 3D 渲染最底层的一件事:显卡只会画三角形,其他一切都是骗眼睛的。(这句话记住,后面所有章都是它的扩展)

代码长什么样:一个面 = 两个三角形
demo 里那 6 个面,是照着下面这段代码的思想手写的。一个正方形面,在 Three.js 里就是 4 个顶点坐标 + 一串”每 3 个一组”的索引:
// 步骤 1:报出 4 个顶点的坐标(左下、右下、右上、左上)
const geometry = new THREE.BufferGeometry();
geometry.setAttribute('position', new THREE.Float32BufferAttribute([
  -0.75, -0.75, 0,    // 0 号顶点:左下
   0.75, -0.75, 0,    // 1 号顶点:右下
   0.75,  0.75, 0,    // 2 号顶点:右上
  -0.75,  0.75, 0,    // 3 号顶点:左上
], 3));

// 步骤 2:说清楚"哪 3 个顶点围成一个三角形"
// 三角形 A = 0→1→2(左下、右下、右上)
// 三角形 B = 0→2→3(左下、右上、左上)
geometry.setIndex([0, 1, 2,   // ← 三角形 A
                   0, 2, 3]); // ← 三角形 B
【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。