Games101-课程11笔记

目录

第十一节课 : 曲线和曲面

点云

多边形面:

Wavefront Object File Format(.Obj文件) :

曲线:

贝塞尔曲线

德卡斯特里奥算法算出贝塞尔曲线

计算贝塞尔曲线的代数公式

贝塞尔多项式 

伯思斯坦多项式

贝塞尔曲线的性质

B-splines (B样条)

贝塞尔曲面

 得到贝塞尔曲面过程

 贝塞尔曲面计算图

 具体做法


第十一节课 : 曲线和曲面

点云 (点的集合)

① 可表示任何一个几何

② 扫描得出一堆点云, 如何通过点云得出它们所构成的多角形.

Games101-课程11笔记_第1张图片

 

多边形面(Polygon Mesh) :

① 易于做处理/模拟,附加采样

② 更多链接数据结构

③ 在图形学中,得到最广泛的显示表示

Games101-课程11笔记_第2张图片

 

Wavefront Object File Format(.Obj文件) :

所包含内容有:

V : 顶点坐标

Vt : 纹理坐标

Vn : 法线向量

f 5/1/1 :表示取第5个顶点坐标v5, 第1个纹理坐标vt1, 第1个法线向量vn1

f 5/1/1  1/2/1  4/3/1 :表示v5, v1, v4三个顶点坐标连成一个三角形, 一一对应的纹理坐标为vt1, vt2, vt3, 法线为vn1.

Games101-课程11笔记_第3张图片

 

曲线(Curves) :

贝塞尔曲线(Bezier Curves):

① 必须经过起始点p0,p3

② 沿着p0p1方向走, 往p2p3方向出去, 必须是沿着切线方向来和走.

四个控制点

Games101-课程11笔记_第4张图片

 

德卡斯特里奥算法(de casteljau algorithm)算出贝塞尔曲线 :

三个点组成 (下面曲线名字为二阶贝塞尔曲线quadratic Bezier)

Games101-课程11笔记_第5张图片

 

定义曲线起点时间t为0, 终点为1

所以画出这条曲线, 相当于给出在时间0~1, 点在平面上的位置

显示表示几何(拥有参数t)

算法过程 :

① 假设现在参数时间t =1/3

② 找出b0到b1线段上1/3位置b10

Games101-课程11笔记_第6张图片

 ③ 同样道理, 找出b1和b2线段上1/3的位置b11

Games101-课程11笔记_第7张图片

 

④ 把b10和b11两个点连起来, 找出b10和b11线段上1/3的位置b20

⑤ 这个b20就是在时间t=1/3时, 位于二阶贝塞尔曲线上的点.

Games101-课程11笔记_第8张图片

⑥ 只要用以上算法, 给t设足够多的值, 枚举出足够多的点, 就可以画出二阶贝塞尔曲线

Games101-课程11笔记_第9张图片

 

四个点组成的三阶贝塞尔曲线 :

流程图 :

这里假设t =0.5

Games101-课程11笔记_第10张图片

Games101-课程11笔记_第11张图片 

Games101-课程11笔记_第12张图片 

Games101-课程11笔记_第13张图片 

Games101-课程11笔记_第14张图片 

Games101-课程11笔记_第15张图片 

Games101-课程11笔记_第16张图片 

Games101-课程11笔记_第17张图片 

最后就找到了在时间t=0.5下, 位于三阶贝塞尔曲线的点.

枚举出更多的点, 就能得出三阶贝塞尔曲线

Games101-课程11笔记_第18张图片

 

计算贝塞尔曲线的代数公式

每一个向右的箭头都是乘以t

每一个向左的箭头是乘以(1-t)

每两个点做一个线性插值, 得出一个点.

Games101-课程11笔记_第19张图片

 

将过程显示写出来 :

当t = 0, 就是b0位置

Games101-课程11笔记_第20张图片

 

总结 :

总共有n个控制点, 可以得到n-1阶的贝塞尔曲线.

贝塞尔多项式 :

贝塞尔曲线都是之前给定点的线性组合, 它们的系数是伯思斯坦多项式(Bernstein polynomial)

Games101-课程11笔记_第21张图片

 

将上述公式简化 :

n(左边式子)表示多少阶, 控制点为0阶, 每插值操作一次得到的所有点升1阶.

j 表示第几个控制点.

Games101-课程11笔记_第22张图片

 举例四个控制点, 将贝塞尔多项式展开

Games101-课程11笔记_第23张图片

 伯思斯坦多项式(Bernstein polynomial) :

Games101-课程11笔记_第24张图片

 

贝塞尔曲线的性质 :

下面以三个控制点组成的二阶贝塞尔曲线为例

① t = 0时,一定在起点;         t = 1时, 一定在终点.

② 这只是四个控制点的公式 :(如果不是四个,那么系数不一定是3)

b’(0) :起始的切线方向         b’(1) :终点的切线方向

 ③ 只在仿射变换才能保证与原来的贝塞尔曲线一致,其它变换不行(投影等等): 通过变换控制点来变换曲线

 

④ 凸包性质

画出的贝塞尔曲线, 必须在由控制点组成的凸包内.

Games101-课程11笔记_第25张图片

 

⑤ 高阶贝塞尔曲线(多个控制点组成) :

缺点 :不利于控制它的走向

Games101-课程11笔记_第26张图片

 

⑥ 为了解决难控制问题 :

提出了分段三次贝塞尔曲线

(通过四个控制点形成的低阶贝塞尔曲线, 将它们连在一起得到更长的高阶贝塞尔曲线).

Games101-课程11笔记_第27张图片

 

⑦ 如何使终点光滑(往切线方向)

答 :相关的两个控制点离终点距离一样, 且共线.

例子看如下 :(从左往右)第3,4个控制点

Games101-课程11笔记_第28张图片

 

两条贝塞尔曲线 :

Games101-课程11笔记_第29张图片

 

不同的两条贝塞尔曲线的连续定义 :

① 曲线的终点是另一条曲线的起点

② 切线连续,向量(a(n)-a(n-1))与(b(1)-b(0))长度一样, 方向一样

Games101-课程11笔记_第30张图片

 

B-splines (B样条)

在本节课就不阐述, 需要深入学习进入下方网站.

Games101-课程11笔记_第31张图片

 

贝塞尔曲面

例子:

Games101-课程11笔记_第32张图片

 用4*4的控制点形成一个曲面 :

Games101-课程11笔记_第33张图片

 得到贝塞尔曲面过程 :

Games101-课程11笔记_第34张图片Games101-课程11笔记_第35张图片 Games101-课程11笔记_第36张图片 

 贝塞尔曲面计算图 :

Games101-课程11笔记_第37张图片

 

具体做法 :

需要 :

① 4*4的控制点

② 一个2D的(u , v)坐标, 类似于纵向的t1 (求在纵向上每条贝塞尔曲线在 t1时刻的点(蓝线), 下图中的四个点), 横向的t2(求横向上t2时的点, 下图中四个点连成的一条横向的线).

 Games101-课程11笔记_第38张图片

你可能感兴趣的:(Games101,图形渲染)