课程来源:GAMES101-现代计算机图形学入门-闫令琪
Lingqi Yan
UC Santa Barbara
计算机图形学中的显式几何
![[图片]](https://img-blog.csdnimg.cn/86709a192acc499e83d23085bdae2417.png)
1. 点云
不考虑一个表面,每个模型都是实心的,点云的密度越大,物体的表面越明显。
理论上你的点足够密,就可以表示任何物体。
如何把点云变成三角形面,这是个问题。
![[图片]](https://img-blog.csdnimg.cn/4f2871bbbed547e09ff6fbac91808a8e.png)
2. 多边形网络
存储顶点和多边形(通常是三角形或四边形)更容易进行处理/模拟,自适应采样更复杂的数据结构,可能是图形中最常见的表示
![[图片]](https://img-blog.csdnimg.cn/b144792ad0bb49e18c6466f5bfdd17b0.png)
Wavefront Object File
- 只是一个指定顶点、法线、纹理坐标及其连通性的文本文件。
- 简称Object File,通常用于图形学研究的文件格式。
- 定义一系列的点,发现,纹理,并将它们对应起来(图中的f)——哪几个点形成三角形,分别用哪些纹理坐标,并且分别用哪些法线。
![[图片]](https://img-blog.csdnimg.cn/a75d1dee4f4d4e289b681b7ca68e1518.png)
曲线
![[图片]](https://img-blog.csdnimg.cn/5541562aa2994cd0b990e4a8635ea1ce.png)
让摄像机沿着某个定义好的曲线移动。
![[图片]](https://img-blog.csdnimg.cn/cb189d7ff7694952979db04c053c57d4.png)
矢量图:用曲线定义一个字体。
Bézier Curves 贝赛尔曲线
用一系列的控制点去定义某一个曲线。
![[图片]](https://img-blog.csdnimg.cn/ab31b5619a74418c951608b7cc515f1f.png)
如何去画一条贝塞尔曲线
用任意多的点画出一条贝赛尔曲线——算法名de Casteljau Algorithm(这个算法名实在是没法翻译,因为是人名。。)
首先膜拜一下两位大佬:

想要画出这条曲线,知道这个曲线的点在任意一个时间t对应的位置即可。
![[图片]](https://img-blog.csdnimg.cn/6fd4064fcb4c44ac96206027745efae5.png)
输入三个点, b 0 , b 1 , b 2 b_0,b_1,b_2 b0,b1,b2,并找一个时间 t t t,假设 t = 1 / 3 t=1/3 t=1/3,在 b 0 到 b 1 b_0 到b_1 b0到b1和 b 1 到 b 2 b_1到b_2 b1到b2上分别找出 1 / 3 1/3 1/3的点,并把它们连起来。在连起来的线段上,继续寻找时间 t t t的位置,基本还是 1 / 3 1/3 1/3的位置,再点上一个点。至此,我们求得到的 b 0 2 {b_0}^2 b02就是我们要求的贝塞尔曲线在时间 t t t 上的位置。
![[图片]](https://img-blog.csdnimg.cn/52da1b63e08242199c18fd832f1b52dd.png)
只要我们能画一个点,我们就能画出所有的点。这里不用考虑t不连续的问题,就当它是连续的好了。
把所有的点都找一遍,就找到了我们所求的贝赛尔曲线。
![[图片]](https://img-blog.csdnimg.cn/c91ab59444e446dabf569fd4d4f397fe.png)
当有4个点的时候也和上面方式类似,在每条线段上寻找时间 t ( t ∈ [ 0 , 1 ] ) t(t∈[0,1]) t(t∈[0,1])的位置,并将它们连起来,再接着在新的线段上寻找时间 t t t的位置,直到最后一个点。
![[图片]](https://img-blog.csdnimg.cn/cb0824e1e2954dad9d8b6c08447ca21e.png)
很明显,寻找贝塞尔曲线在点 t t t的位置是一个递归的过程,当有4个点时,需要遍历3次。
![[图片]](https://img-blog.csdnimg.cn/7561f950788e4f669165707ff9991440.png)
用以下动画可以表示绘制这个曲线的过程
三个点

四个点

计算贝塞尔曲线的代数公式
系数金字塔
![[图片]](https://img-blog.csdnimg.cn/4ecdb5e94576430588e68726b5e6930a.png)
对于任意一个 t t t,都可以以系数金字塔的方式寻找出对应的点。
![[图片]](https://img-blog.csdnimg.cn/0359b405414249d1bbb56eaf92e515e2.png)
例如:三个点绘制贝赛尔曲线
先前只是用现象描述了一下贝塞尔曲线的绘制,现在用数学公式将其表现出来。
![[图片]](https://img-blog.csdnimg.cn/9ee3838cee104ec182376088415d7ae3.png)
n n n阶贝塞尔曲线公式
![[图片]](https://img-blog.csdnimg.cn/857db15522b347aaa0d189d6e694ce19.png)
![[图片]](https://img-blog.csdnimg.cn/a8bcf26a9c0f430bb1c24b20fd8a6b3a.png)
Bernstein多项式:无论 t t t取何值,多项式的和一定为1.
![[图片]](https://img-blog.csdnimg.cn/3a9137dc3c314704bd94a48a55c85a07.png)
![[图片]](https://img-blog.csdnimg.cn/728457f049fe4cd0837c59bffd3a1f16.png)