Lec 11 Geometry 2 (Curves and Surfaces) 几何2 曲线和曲面
显式几何
点云
- 表面上的一堆点(x, y, z)(只要够细,就近似面)
- 可以表示任何类型的几何
- 点云密度低就很难画出来
多边形面
-
三角形面
-
连接关系
-
如何表示三角形面形成的物体
-
Wavefront Object File(.obj)文件
-
一堆点(坐标),法线,12个纹理坐标和他们的连接关系
- v 顶点
- vn 法线
- vt 纹理坐标
- f 连接关系,法线,纹理坐标
-
-
-
四边形面
曲线
- 可以让相机 or 模型跟着走
- 可以定义字体,通过加控制点加曲线定义字体
贝塞尔曲线 (Bezier Curve)
-
用一系列控制点定义曲线
-
怎么画贝塞尔曲线
-
de Casteljau Algorithm
-
点 t 就是由 b 0 , b 1 , b 2 b_0,b_1,b_2 b0,b1,b2定义的贝塞尔曲线在时间 t 的点
-
通过时间 t,简化线段,直到只剩一根线段并且去他的 t 点
-
代数形式(用线性插值)
-
伯恩斯坦多项式
-
-
特性
- 起点终点确定
- 在仿射变换下,变换之后的点画出来的贝塞尔曲线与变换前画线在变换画出来是同一条
- 凸包性质,能够包括一定的几何形体的最小凸多边形。任何时候贝塞尔曲线一定在控制点形成的凸包内
-
-
逐段控制贝塞尔曲线(Piecewise Bezier Curves)
- 一般用四个点控制一段
-
C
0
C^0
C0连续
a
n
=
b
0
a_n = b_0
an=b0
- 挨上就算
-
C
1
C^1
C1连续
a
n
=
b
0
=
1
/
2
(
a
n
−
1
+
b
1
)
a_n = b_0 = 1/2(a_{n-1} + b_1)
an=b0=1/2(an−1+b1)
- 切线也要连续
-
Spline 样条
- 一个可控的曲线
- B-splines
- 基函数
- 对贝塞尔曲线的扩展
- 具有局部性
曲面
- 贝塞尔曲面
- 需要两个时间t,一个方向为另一个方向生成控制点
Mesh
-
网格细分 (Mesh subdivision)
-
Increase resolution
-
分出更多三角形
-
使三角形发生细微变化,使得表面更加光滑
-
loop subdivision (loop(这哥们名字叫loop,和循环没关系)细分)
- 先细分,再调整
- 对于新的顶点
-
边的中心变成新的顶点(图中的白点)
-
必定被两个三角形共享
-
两个三角形共享的两个顶点叫A,B,不共享的叫C,D
-
这个点的位置就变成$ 3/8 * (A + B) + 1/8 *(C+D)$ 本质上就是一个加权平均(共享的点权值大一点)
-
- 对于旧的顶点
-
一部分相信周围老的顶点的值,另一部分保留自己的影响
-
n: 老顶点的度
-
u如图所示算出来的一个系数
-
这个点连的三角形越多,越不重要,越受其他顶点影响
-
连的三角形越少,越重要,越受自己影响
-
-
Catmull-Clark Subdivision (General Mesh)
-
如果不是三角形网格用不了 loop 细分
-
奇异点与非四边形面
-
非四边形面在一次细分之后都会变成奇异点
-
FYI catmull-Clark 顶点更新规则(四边形网格)
-
所有点区分成三类
- 面中心的点
- 边中心的点
- 老的点
-
-
-
-
网格简化 (Mesh Simplification)
- 希望能用更多三角形表示物体,但是受性能制约
- 边坍缩(Edge Collapsing)
- Quadric Error Metric(二次误差度量)
- 像是L2距离,给每一条边打分
- 用最小堆,每次取最小的点,塌缩后更新这条边影响的其他边
- 是一种贪心算法,并不能保证全局最优,但是效果也挺不错了
- Quadric Error Metric(二次误差度量)
-
正规化 (Mesh regularization)
- 用更加多的正三角形表示面