我们可以用许多方法来表示几何
隐式的
•代数曲面
•水平集
•距离函数
•……
显式的
•点云
•多边形网格
•细分,NURBS
•……
选择最适合当前的任务/几何类型方式即可
1.两种表示方式的优缺点
隐式 | 显式 | |
---|---|---|
优点 | 可以方便判断一个点在该几何的外面里面还是在几何上 | 可以方便找出该几何上每一个点画出几何图形 |
缺点 | 不方便找出该几何上每一个点画出几何图形 | 不方便判断一个点在该几何的外面里面还是在几何上 |
例子:
看这个隐式的函数表达很难知道它的几何形状,而显式的表示则可以直接弄出几何形状。
2.代数曲面(隐式)(Implicit)
2.1构造立体几何(隐式)
通过布尔运算结合隐式几何
2.2距离函数(隐性)
取代布尔值,逐渐混合表面一起使用
距离函数:给出从任何地方到对象的最小距离(可以是带符号的距离)
一个例子:混合(线性交互)一个移动的边界
我们想混合这两个边界
假如我们直接混合,就会是这样的:
中间会出现灰的,显然不对。
如果我们用距离函数:
边界为0。
把那张图结合。
再反回去,就直接成功了。
这就是距离函数的作用。
有一个和距离函数差不多的概念叫水平集
也是取0那条线为边界值
3.显式(Explicit)
3.1点云
最简单的表示:点列表(x,y,z)
很容易表示任何几何图形
适用于大型数据集(>>1点/像素)
经常转换成多边形网格
在采样不足的地区很难提取
3.2多边形网格(显式)
存储顶点和多边形(通常是三角形或四边形)
更容易处理/模拟,自适应采样
更复杂的数据结构
也许是图形中最常见的表示方式
4.曲线(Curves)
⻉塞尔曲线(Bézier Curves)
由几个顶点决定一条曲线(一般为4个)
Bézier曲线的性质
插入端点
•cubic Bézier:b(0) = b0; b(1) = b3
与末端段相切
•立方的例子:
仿射变换性质
•通过变换控制点来变换曲线
凸包性质
•曲线在控制点的凸包内
凸包:紫色这条线
分段贝塞尔曲线
http://math.hws.edu/eck/cs424/notes2013/canvas/bezier.html
一般为四个控制一条,然后连起来。
连续性问题,一般考虑C0连续和C1连续
C0连续:段点值相等
C1连续:连线方向相同且大小相等(导数一样)
其他类型的样条曲线
b样条
-基样条的缩写
-需要比Bezier曲线更多的信息
-满足Bézier曲线的所有重要属性(例如:超集)
贝塞尔曲面
5.网格操作:几何处理
•网格细分
•网格简化
•网格正规化
网格细分
loop细分 (loop是人名!!)
点更新:
u大概是对外面的点的信任度。。
Mesh Simplification
主要是采用边塌缩
通过二次误差进行简化
迭代坍缩边缘
哪边?用二次误差度量来分配分数
•到表面的近似距离为到包含三角形的平面的距离之和
•迭代折叠分数最小的边(用优先队列)
待续…