计算机图形学Games101笔记--几何
第二部分:几何
几何介绍
光栅化解决如何渲染,几何研究模型如何存储在GPU的内存中。几何主要分为两种:隐式几何和显式几何。
**隐士几何:**用点之间的关系存储,如球的计算公式。更一般的可以用f(x,y,z)。我们可以令f为0来判断某个点是否在某个表面上。但很难找出表面上的所有点
**显式几何:**把所有面上的点都给出或者通过参数映射的方式。比如平面到三位的映射,我们只需要遍历平面上的所有点即可得到三位模型表面的所有点。但是不容易判断某个点是否在表面。
隐式表示
**描述复杂模型:**我们可以用简单几何的交并差来构建复杂形体(显式几何)
**距离函数表示:**用点到面的距离函数表示几何形体。距离等于0的点则位于表面。距离函数表示可以很容易获得两个物体融合的形体。我们可以用距离函数的融合来表示物理的融合过程。工程中,我们可以用水平集的方式表示距离,通过插值的方式找到距离等于0的点。
显式几何表示
**点云 point Cloud: **用不同算法把点云变成不同的面
**多边形面Polygon Mesh:**特别是三角形面。下面的文本文件定义了8个顶点和6个法线;24个纹理坐标,每个点的纹理坐标,中间可能涉及到公用;f定义三角形,a/b/c表示三角形每个点的顶点坐标,纹理坐标和法线坐标。
曲线
贝塞尔(Bezier)曲线
定义:可以被认为通过参数定义,所以是显式定义的曲线
计算方法Definitely Casteljau Algorithm
核心思想:通过找某个时刻的点画出最终曲线。
quadratic Bezier二次贝塞尔曲线的计算方法
其他贝塞尔曲线进行递归计算即可。
计算方法相当于把四个控制点的坐标用伯恩斯坦多相似的系数加权线性组合起来。
性质:
- 放射变换不变性,对控制点做仿射变换后再计算新的曲线。
- 起点的切线一定是起点沿着第二个控制点的方向,终点的切线一定是倒数第二个点和倒数第一个点的连线方向。
- 投影变化曲线会发生变化!!
- 凸包性质:贝塞尔曲线一定在控制点的凸包内
**分段贝塞尔曲线:**每4个控制点画一个贝塞尔曲线。为了保证不同贝塞尔曲线组成一个光滑的曲线,每个曲线的起点的切线和前面曲线的终点的切线共线且大小相等(c1连续,c0连续只要有共点即可):
splines样条曲线
一个可控的曲线
一种连续曲线,其构造是为了通过一组给定的点并有一定数量的连续导数。
B样条(B-splines)曲线:
又叫做basis splines,绘制起来需要比贝塞尔曲线更多的信息,拥有贝塞尔曲线所有的重要性质
11-6-2Bezier曲线曲面第一节_哔哩哔哩_bilibili
曲面
贝塞尔曲面
可以按双线性插值的思维理解:把空间控制点分组,每组可以画出一个曲线,在把不同时刻的不同曲线上的点看作控制点再画出一个曲线。
三角形网格操作
- Mesh subdivision //引入更多三角形,使得模型变得更加光滑
- mesh simplification
- Mesh regularization //把三角形尽可能变为正三角形
Subdivision
**Loop Subdivision:**把三角形才分为4个(连接三边中点)。分为新旧两种顶点。
==新顶点操作:==找到每个新顶点的相邻4个顶点(共线的两个顶点,和共线的两个三角形的其他顶点)。对这4个顶点做一个加权平均。
==旧顶点操作:==用它周围其他顶点和自身顶点来更新坐标,同时考虑到了旧节点的度。
**Catmull-Clark Subdivision (General Mesh)卡特姆尔克拉克:**更加一般的情况,不要求原图形是三角形。
对于每一个区域的细分,找到该区域的中心点和每个边的中心点,把这些点连接起来。该方法引入了一个奇异点(度不等于4的点)概念,只有第一次细分的时候有可能会增加奇异点(相当于把三角形变成了奇异点)。
==面的中心点:==它周围点的加权平均值
==边的中心点:==它周围点的加权平均值
==旧的顶点:==考虑度情况下的周围点加权平均值。
Simplification
不同情况下用不同精度的模型。
不同高精度模型切换的时候如何平滑过度。
**Coilapsing An Edge边坍缩:**把一些边去掉,并且顶点替代。
==坍缩哪些边?==用Quadric Error Metrics(二次误差度量)来确定代表点。坍缩的时候可能会影响其他边的二次误差度量。因此需要动态更新,采用小根堆的形式,每次取最小后动态更新一下和他相关的数据。
二次误差度量:新顶点到先前相关三角形平面的平方和。
具体步骤:
- 对于每个点的坍缩,我们计算它不同数量周围点的二次误差,选择最小的二次误差作为该边的坍缩二次误差。
- 对于所有的边,我们对二次误差进行排序,每次坍缩二次误差最小的边,并且重新计算受影响边(与该边相连的边)的二次误差。