几何
表示
隐式
形式:
f
(
x
,
y
,
z
)
=
0
f(x,y,z) = 0
f(x,y,z)=0
可以很好地判断一个点是否在几何面上,但是不能很直观地看出几何形体
显式
形式:
f
(
u
,
v
)
=
(
,
,
)
f(u,v) = (,,)
f(u,v)=(,,)
通过将u, v坐标映射到x, y, z坐标上,可以容易地给出几何形体,但是难以判断一个点是否在几何面上。
隐式几何
几何之间可以通过并、交、差的方式得到复杂的几何。
距离函数: 表示所有点到边界的距离
通过将两个距离函数相加,可以将为值0的点还原得到融合后的几何
显式几何
点云
多边形网格
贝塞尔曲线
用多个控制点表示一条贝塞尔曲线并不直观,通常采用逐段表示的方法,每四个控制点表示一段贝塞尔曲线,然后连接起来。
贝塞尔曲面
网格操作
网格细分
Loop细分
将每个三角形分割成四个三角形,生成新的顶点并更改旧的顶点位置。
新的顶点:
3
/
8
∗
(
A
+
B
)
+
1
/
8
∗
(
C
+
D
)
3/8*(A+B) + 1/8*(C+D)
3/8∗(A+B)+1/8∗(C+D)
旧的顶点:
(
1
−
n
∗
u
)
∗
V
+
o
r
i
g
i
n
a
l
_
p
o
s
i
t
i
o
n
∗
n
e
i
g
h
b
o
r
_
p
o
s
i
t
i
o
n
_
s
u
m
(1 - n*u) * V + original\_position * neighbor\_position\_sum
(1−n∗u)∗V+original_position∗neighbor_position_sum
n: 顶点的度
当
n
=
3
n=3
n=3 时,
u
=
3
/
16
u=3/16
u=3/16 ,否则
u
=
3
/
(
8
n
)
u=3/(8n)
u=3/(8n)
Catmull-Clark细分
Loop细分只能用于三角面,Catmul-Clark适用范围更广
新的顶点:
旧的顶点:
网格简化
边坍缩算法:
二次误差度量:
找到一个点,使其到原本周围的面距离的平方和最小,以此作为边的坍缩影响程度。
可以使用贪心的思想进行坍缩,又因为边坍缩后会影响到周围的边,所以需要使用带修堆来存储所有的边。