GAMES101-Lec10~12几何 曲线 曲面网格
目录
1.几何的表示
1.1显示
所有曲面的点都直接给出或者可以通过映射关系得到
虽然没有直接给出点的数据x,y,z,但是拥有u,v的取值范围以及从( u , v ) → ( x , y , z ) 的映射关系,那么只需要将所有的u,v代入自然就可求得x,y,z。
1.1.1更多显示表示方法
1.1.1.1点云
不考虑物体是一个表面,而是表面为一堆点,只要点足够密集,就看不到点与点之间的缝隙
理论上可以表示任何几何
通常三维扫描等得到的结果就是点云
点云可以变成三角形面
1.1.1.2多边形网格
多边形网格被非常广泛地应用,可以用obj文件来表示
1.2隐示
例如:x+y+z=1或者f(x,y,z)=0;
缺点:不会告诉任何点的信息,只会告诉该曲面上所有点满足的关系。
优点:能够很容易的判断出一个点与曲面的关系。
1.2.1更多隐示表达法
1.2.1.1代数曲面
1.2.1.2 CSG
CSG指的是可以对各种不同的几何做布尔运算,如并,交,差,通过这些操作可以得出各种更为复杂的几何:
1.2.1.3距离函数SDF
效果图如下
原理:首先对于符号距离函数来说本质上就是一种定义距离的函数。如有空间任意一点到各个几何物体表面的距离,对这些距离做各种各样的运算操作最后得到的一个函数就是最终的距离函数了,
对于这样一个二维平面的例子,定义空间中每一个点的SDF为该点到阴影区域右边界的垂直距离,在阴影内部为负,外部为正,因此对于A和B两种阴影来说的SDF分别如上图下半部分所示。有了SDF(A),SDF(B)之后对这两个距离函数选择性的做一些运算得到最终的距离函数,这里采用最简单的SDF = SDF(A)+SDF(B)来举例,最终得到的SDF为零的点的集合即为blend之后曲面,对该例子来说,就是两道阴影之间中点的一条线。距离函数得到后,表面怎么得到呢,也就是距离函数为0的地方为表面
对于几何体混合效果自然不可能像这里简单的两个距离相加就可以得到了,该效果具体实现是找出任一个点到两个几何体表面距离中的最短距离再减去一个变量作为该点最终的SDF
1.2.1.4水平集
水平集的方法其实与SDF很像(像是SDF的一种特殊形式),也是找出函数值为0的地方作为曲线,但不像SDF会空间中的每一个点有一种严格的数学定义,而是对空间用一个个格子去近似一个函数,如下:
对该面内的每一个点利用已经定义好的格子值进行双线性插值就可以得到任意一点的函数值,找出所有=0的点作为曲面。
1.2.1.5分型几何
分型几何是指许许多多自相似的形体最终所组成的几何形状。
如雪花是一个六边形,放大之后会发现每一个边上又是一个六边形,再放大六边形边上的六边形边上又是六边形,就这样无限套娃
区别隐式曲面与显示曲面的关键就在于是否可以直接表示出所有的点
2.曲线
2.1贝塞尔曲线
贝塞尔曲线是需要一系列的控制点去定义某一个曲线
2.2 计算方法
先给出三个点:
根据任意的 t 插值出点
连起来再做一次
不断重复 t在[0,1]间不断取值,这样得到一条贝塞尔曲线
其核心所在就是多次的线性插值,并在生成的新的顶点所连接构成的线段之上递归的执行这个过程,直到得到最后一个顶点
四个点同理:
2.3代数表示
二项分布的多项式
2.4性质
1 必定经过起始与终止控制点
2 必定经与起始与终止线段相切
3 具有仿射变换性质,可以通过移动控制点移动整条曲线
4 凸包性质,曲线一定不会超出所有控制点构成的多边形范围
2.5逐段贝塞尔曲线
控制点多了以后,贝塞尔曲线并不直观,很难控制
于是我们想到每次定义一段贝塞尔曲线,然后连起来
普遍习惯每四个控制点定义一段
3.曲面
3.1贝塞尔曲面
画出四条贝塞尔曲线后,在这四个线上再取四个点,认为是一个新的贝塞尔曲线的控制点
在不断扫的过程中,形成了曲面
4.几何处理
4.1网格细分
网格细分是指将一个模型的面合理的分成更多小的面,从而提升模型精度,提高渲染效果
4.1.1Loop细分
连接各边中点,创建三角形
区分出新老顶点再处理
(LOOP细分的由来:创建者的姓是LOOP,不是循环的意思)
对于新的顶点(白色的顶点),会按照如下的公式调整位置
对于旧的顶点,一部分靠周围旧的顶点的值,一部分保留自己的,按照公式移动位置
n为顶点的度(连接的边的数量)
u为一个和n有关的数
效果:
4.1.2Catmull-Clark 细分
Loop细分假设的是三角形网格,但是对于非三角形网格,就没办法,这时候就要用到Catmull-Clark 细分。
可以定义四边形面以及非四边形面
如果度不为4的点 定义为奇异点
一次细分的过程
取边上的中点,以及面上取一个点(重心或者其他的),把这些点连起来
在这个过程中,引入了两个度为3的奇异点(在两个三角形中点的点),所以一共有4个奇异点
在这个过程中,所有的面都变成了四边形面
也就是一次细分后,每一个非四边形面消失,并会引入一个奇异点
也就是之后的细分,不会再增加奇异点数目了
继续细分,奇异点不变
点的位置的调整,分为三类
新的点分为 面上的点,边上的点 分别操作
老的点单独操作
4.2网格简化
网格简化是指将一个模型的面合理的合成更少的面,从而降低模型精度,为特定情形下提供使用(如LOD技术)
一种网格简化的方法 边坍缩
二次误差度量:即坍缩之后蓝色新顶点所在的位置与原来各个平面的垂直距离之和。如果能够使得这个误差最小那么对整个模型样貌修改一定程度上也会较小。
流程:
1 为模型每条边赋值,其值为坍缩这条边之后,代替两个老顶点的新顶点所能得到的最小二次误差度量
2 选取权值最小的边做坍缩,新顶点位置为原来计算得出使得二次误差最小的位置
3 坍缩完之后,与之相连其他的边的位置会改动,更新这些边的权值
4 重复上述步骤,直到到达终止条件
效果:
Reference
https://blog.csdn.net/weixin_43803133/article/details/108098678
https://blog.csdn.net/qq_38065509/category_9873936.html
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!