第二章 三维建模基础:点云、坐标系与网格模型
各位同学,欢迎来到三维建模的世界。说实话,我第一次接触叶片三维建模时,面对一堆密密麻麻的点云数据,整个人是懵的。后来做了十几年项目,才慢慢摸清这里面的门道。今天咱们就聊聊三维建模最基础的三件事:点云数据、坐标系、网格模型。
你想想看,一个叶片从实物变成电脑里的三维模型,中间经历了什么?说白了,就是三个步骤:先采集数据,再确定位置,最后构建表面。嗯,咱们今天就按这个逻辑来。
2.1 点云数据概念
点云是什么?我习惯这么跟新人解释:你拿一把芝麻撒在叶片表面,每粒芝麻记录下它的XYZ坐标,这一堆芝麻就是点云。当然,实际采集时用的是激光扫描仪或者结构光相机,不是真的撒芝麻。
点云数据有几个关键属性:
- 空间坐标:每个点都有X、Y、Z三个数值,这是最基本的
- 颜色信息:有些扫描仪还能记录RGB值,方便后期识别
- 法向量:表示该点所在表面的朝向,对重建很重要
- 强度值:激光回波的强度,不同材质反射不一样
点云数据常见的格式有PLY、PCD、LAS等。我个人偏爱PLY格式,因为它能同时存坐标、颜色和法向量,一个文件搞定所有。
// 一个简单的PLY文件示例
ply
format ascii 1.0
element vertex 6
property float x
property float y
property float z
property uchar red
property uchar green
property uchar blue
end_header
0.0 0.0 0.0 255 0 0
1.0 0.0 0.0 0 255 0
0.0 1.0 0.0 0 0 255
0.0 0.0 1.0 255 255 0
1.0 1.0 0.0 255 0 255
1.0 0.0 1.0 0 255 255
2.2 三维坐标系
坐标系这事儿,看着简单,但坑特别多。我记得刚入行时,就因为坐标系搞混,导致一个叶片模型装不到发动机上去,被师傅骂了一顿。
三维建模中主要涉及两种坐标系:
2.2.1 世界坐标系
世界坐标系是全局的、固定的。你可以把它想象成整个场景的"大地基准"。在叶片分析中,世界坐标系通常以发动机中心为原点,X轴指向飞机前进方向,Z轴垂直向上,Y轴按右手定则确定。
2.2.2 局部坐标系
局部坐标系是跟着物体走的。每个叶片都有自己的局部坐标系,原点在叶根中心,Z轴沿叶片长度方向。这样做的好处是:不管叶片怎么旋转移动,它的局部坐标值不变,方便做损伤定位。
为什么会需要两种坐标系?你想想看,你要描述叶片上一个裂纹的位置。用世界坐标系说"在(1.23, 4.56, 7.89)处",别人根本不知道是哪个叶片的哪个位置。但用局部坐标系说"在叶片2的叶中前缘处",一目了然。
2.3 网格模型
点云只是一堆离散的点,要变成连续的表面,就得靠网格模型。最常见的两种格式是STL和OBJ。
2.3.1 STL格式
STL格式只存三角形面片的信息。每个三角形由三个顶点和一个法向量组成。结构简单,但信息量也少——没有颜色、没有材质。
// STL文件格式示例
solid blade
facet normal 0.0 0.0 1.0
outer loop
vertex 0.0 0.0 0.0
vertex 1.0 0.0 0.0
vertex 0.0 1.0 0.0
endloop
endfacet
facet normal 0.0 0.0 1.0
outer loop
vertex 1.0 0.0 0.0
vertex 1.0 1.0 0.0
vertex 0.0 1.0 0.0
endloop
endfacet
endsolid blade
2.3.2 OBJ格式
OBJ格式就丰富多了。它不仅能存顶点和面,还能存法向量、纹理坐标、材质信息。做叶片损伤分析时,我更喜欢用OBJ,因为可以把损伤区域用不同颜色标出来。
// OBJ文件格式示例
# 叶片模型
v 0.0 0.0 0.0
v 1.0 0.0 0.0
v 0.0 1.0 0.0
v 1.0 1.0 0.0
vn 0.0 0.0 1.0
f 1//1 2//1 3//1
f 2//1 4//1 3//1
2.4 知识体系总览
说了这么多,咱们用一张图来梳理一下本章的核心逻辑:
这张图把本章的核心逻辑串起来了。你从点云数据出发,经过坐标系对齐,再到网格重建,最后才能做损伤分析。每一步都离不开前面打下的基础。