1.隐式几何(lmplicit Geometry):只给出关系公式判断几何形态,如x*x+y*y+z*z=1表示在一个球上,一般用f(x,y,z)=0表示,如下图,红表示正,蓝表示负,可以得到边界,缺点是不直观,有些图形公式表示复杂,适合判断某个点在物体内外关系
显式几何(Explicit Geometry):通过三角形面表示,也可以通过下图参数映射的方式,很难判断某个点的在物体的内外关系
2.隐式几何的几种方法
Constructive Solid Geomery:通过基础几何图形进行布尔运算
Distance Functions:计算任意一个点到几何表面距离,通过距离函数计算,下图将
两个物体的距离函数进行融合,再恢复到原本物体形状
下图将两者距离函数融合后得到边界在中间
level set method:类似于地理上的等高线,计算距离,f(x)=0表示这条线上距离都为0,即为边界
Fractals:自相似,复制类似几何体
3.显式几何的几种方法
点云(point cloud):用一系列点表示物体表面
多边形网格(Polygon Mesh):用一系列三角形面
4.贝塞尔曲线(Bezier Cuurves):也属于显式几何,通过一系列控制点定义一个曲线,假设一个时间轴(0,1),但时间为t时,在b0b1上找对应t:1-t的位置,b1b2同理,找到的两个点再作一次操作得到曲线的某个点,三条线段同理
凸包:能包围一系列点的凸多边形,贝塞尔曲线一定在几个控制点形成的凸包里面
逐段贝塞尔曲线:每四个控制点定义一个贝塞尔曲线,把各段曲线连接起来,仅仅是第一段终点和第二段起点在一起叫C0连续;但要确保转折点导数连续,即需要转折处两控制点在同一直线、方向相反、距离一样叫C1连续;
5.样条(Splines)
B样条(B-Splines):贝塞尔曲线修改一个点,整个曲线可能都要一起修改,除非使用分段贝塞尔,但分段麻烦,而B样条具有局部性。
6.贝塞尔曲面(Bezier Surface)
如下图,定义4*4的控制点,获得四个贝塞尔曲线,再将四条曲线上的四个移动点作为新的四个控制点,扫过的面为贝塞尔曲面
7.细分(Subdivision)
循环细分(Loop Subdivision)
一个三角形分割为四个小三角形,更新新顶点的位置,
下图中两个三角形相交位置,中间白点位置为3/8*(A+B)+1/8(C+D);
下图中是多个三角形相交的位置,白点更新为(1-n*u)*白点原本位置+u*周围顶点位置之和,即一般该新顶点周围连接三角形越多,该点原本位置权重越小;
奇异点:度不为4的顶点
General Mesh(Catmull-Clark Subdivision)
每条边取中点,每个面也取中点,把这些点连起来;
性质:原本该网格内有x个非四边形面,细分后就会对应多出x个奇异点,经过一次细分后已经不存在非四边形面了,所以后面不管细分几次都不会有新奇异点出现;
如何计算新增顶点(了解即可):
8.曲面简化(Mesh Simplification)
边塌缩(edge collapsing):将多个顶点合并为一个顶点来减少边数
二次误差度量(Quadric Error Metrics):边塌缩时直接求平均效果不好,新顶点会比较“矮”,二次误差度量是找到一个新的点使得它到相关几个面的距离平方和最小;每次塌缩后都会引起周围的边,要依次继续更新周围边对应的新塌缩点,这是数据结构里堆的算法思想;