图形学几何

1.几何的分类

隐式几何: 无明确表示,如用函数表示曲面,如点(x, y, z) 满足一定函数f(x, y)关系就在一个曲面上。判断点的位置关系很方便,遍历绘制图形比较困难。

image-20231209124852632

显式几何: 有明确表示方法,直接给出,或通过参数映射给出几何信息,比如一般的点云或网格。遍历绘制图形比较方便, 但判断点的位置关系,如内外、是否在表面上比较困难。

image-20231209124540218

注:显式几何的点被直接给出或可通过映射关系得到。

区别:区别隐式曲面与显示曲面的关键就在于是否可以直接表示出所有的点

注:隐式曲面难以采样曲面上的点,但是可以轻易判断点与曲面的关系,对于显式曲面来可以很轻易的采样到所有的点,但是给予你任意一点却很难判断它与曲面的关系。

1.1 隐式几何的例子

  • 代数曲面

image-20231209125119599

  • Constructive Solid Geometry(CSG):对各种不同的几何做布尔运算,如并,交,差

image-20231209125221199

image-20231209125238367

  • 距离函数:得到几何体的混合效果

image-20231209125458243

  • 水平集:找出函数值为0的地方作为曲线

image-20231209125824432

  • 分型几何:通过迭代、自相似性和尺度不变性来描述复杂的几何形状。

image-20231209125952472

1.2 显式几何的例子

  • 点云:(x,y,z)的列表,用点代替面,可用于表示任何空间中的几何

  • 多边形面/三角形(使用的最广泛)

image-20231209130844203

用.obj格式的文件保存模型:顶点、法线、纹理坐标

如下,文件描述了一个立方体:8个顶点、6个法线(右图vn有8个是因为存在冗余)、纹理坐标(vt)

f:顶点/纹理坐标/法线,定义了哪三个顶点构成三角形

image-20231209131213798

2.曲线

2.1 贝塞尔曲线

贝塞尔曲线:用控制点去定义曲线

image-20231209132251079

de Casteljau Algorithm:画贝塞尔曲线

将问题转化为:t点该如何画

image-20231209132632421

由$b_0、b_1$得到$b_0^1$,$b_1、b_2$得到$b_1^1$,由$b_0^1$,$b_1^1$得到$b_0^2$,即为t点

image-20231209132826273

image-20231210094017798

四个点的情况:

image-20231209133247407

给出n个控制点可以得到一个n阶的贝塞尔曲线:

image-20231209133842896

伯恩斯坦多项式:

image-20231209134013528

注:(n,i)是组合数

贝塞尔曲线的性质:

(1).必定经过起始与终止控制点
(2).必定经与起始与终止线段相切
(3).具有仿射变换性质,可以通过移动控制点移动整条曲线
(4).凸包性质,曲线一定不会超出所有控制点构成的多边形范围

注:将t从0到1进行迭代即可得到完整的贝塞尔曲线

逐段定义贝塞尔曲线:更易使用控制点去控制曲线(常用四个控制点定义一段贝塞尔曲线)

image-20231209135657494

2.2 B样条

pass

2.3 NURBS

pass

3.曲面

贝塞尔曲面:需要有两个参数控制(时间u,v),分别控制两次贝塞尔曲线的计算

image-20231209142717655

4.曲面细分

4.1 Loop细分

步骤:

1.生成更多三角形或顶点

image-20231209144613202

2.调整这些三角形的位置(顶点的位置)

顶点分为两类,一类是新生成的顶点,一类是老的原来就有的顶点

对于新生成的顶点:其位置为周围顶点的权重之和

image-20231209145401431

对于旧的顶点:自身以及邻接顶点的权重和,权重的设置与旧的顶点的度有关

image-20231209145809889

4.2 Catmull-Clark细分

用于处理四边形面和三角面的混合的细分

image-20231209150626897

Non-quad face:非四边形面

奇异点:所有度不为4的顶点

第一次细分所有面都会变成四边形,增加的奇异点个数为非四边形面的个数,之后再进行细分,奇异点个数不再增加

image-20231209150826085

点位置的调整:所有点分为:边上的点、面上的点、原来的点

image-20231209151144071

5.曲面简化(Mesh Smplication)

边坍缩:将一条边的两个顶点合成为一个顶点

image-20231209152028718

如何坍缩:使二次误差度量最小

二次误差度量:坍缩之后蓝色新顶点所在的位置与原来各个平面的垂直距离之和

image-20231209152333304

步骤:(使用堆结构)

1 为模型每条边赋值,其值为坍缩这条边之后,代替两个老顶点的新顶点所能得到的最小二次误差度量
2 选取权值最小的边做坍缩,新顶点位置为原来计算得出使得二次误差最小的位置
3 坍缩完之后,与之相连其他的边的位置会改动,更新这些边的权值
4 重复上述步骤,直到到达终止条件