本节课继续讲解上节课的显式几何、曲线和曲面。
显式几何的表示
点云(point clouds)
直接给出所有点的信息,再用这些点组成几何,例如下图所示。
多边形网格(Polygon Mesh)
简单来说通过定义各个多边形面的顶点以及顶点之间的连接关系就可以得到许许多多的三角形面或是四边形面,再通过这些面来近似表现出我们想要的模型效果。
例:
.obj文件通过定义顶点信息,纹理坐标信息,面法线信息。再把它们三个三个组成一个面,最终得到三维物体。obj文件通常广泛应用于图像研究。
曲线与曲面
贝塞尔曲线
贝塞尔曲线:由控制点和线段组成的曲线,控制点是可拖动的支点。
如图,蓝色为贝塞尔曲线,p1,p2,p3,p4为控制点,曲线和初始与终止端点相切,并且经过起点
与终点。
de Casteljau Algorithm
de Casteljau算法描述了如何用多个点画出一条贝塞尔曲线。其核心是线性插值和递归。
贝塞尔曲线的定义很像参数方程,给定一个参数t(0<=t<=1)就能确定贝塞尔曲线上的一点,倘若取完所有t值,就能得到完整的贝塞尔曲线。(由于我没有找到更直观的动图,感兴趣的朋友可以直接百度贝塞尔曲线动图,以获得更直观的了解)
代数式表达
将贝塞尔曲线展开可以得到n阶贝塞尔曲线的代数表达式:
注:
以二阶贝塞尔曲线展开为例
性质
- 必定经过起始与终止控制点
- 必定经与起始与终止线段相切
- 具有仿射变换性质,可以通过移动控制点移动整条曲线
- 凸包性质,曲线一定不会超出所有控制点构成的多边形范围
-
- 凸包:墙上许多钉子,用一条橡皮筋包住最外边的钉子,再松手,橡皮筋收缩后的外框就是凸包。
- 凸包:墙上许多钉子,用一条橡皮筋包住最外边的钉子,再松手,橡皮筋收缩后的外框就是凸包。
ps:由凸包也可以很容易推测出,当贝塞尔曲线的控制点都在一条直线上时,贝塞尔曲线一定是一条直线,因为此时的凸包就是一条直线。
分段贝塞尔曲线
传统贝塞尔曲线的缺点:当控制点多的时候不好控制曲线的形状。
分段贝塞尔曲线:将一条高次曲线分成多条低次曲线的拼接,其中用的最多的便是用很多的3次曲线来拼接。
分段贝塞尔曲线的连续性:连续,表示n阶导数连续。
贝塞尔曲面
以4*4控制点的贝塞尔曲面为例:
- 在这4个控制点之下利用第一个参数 u 运用上文所提到的计算贝塞尔曲线的方法得到蓝色点,因为有4列,所以一共可以得到如图所示的4个蓝色点。(灰色曲线分别为每列4个点所对应的贝塞尔曲线)
- 在得到4个蓝色顶点之后,在这四个蓝色顶点的基础之下利用第二个参数 v 便可以成功得出贝塞尔曲面上一个点
- 遍历所有的 u,v值就可以成功得到一个贝塞尔曲面,如下图所示。