GAMES101课程学习笔记—Lec 10~12:Geometry 几何、隐式与显式、曲线与曲面、网格

该博客围绕GAMES101课程中几何、曲线、曲面及网格相关内容展开。介绍了几何的显式与隐式表达方法,如隐式的代数曲面、CSG等,显式的点云、多边形网格;阐述了贝塞尔曲线的计算、性质等;还提及贝塞尔曲面的生成,以及网格细分和简化的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1 几何的表达方式

  • 几何表达分为显式和隐式
    在这里插入图片描述

1.1 隐式几何

  • 举个例子:用空间中一个点来表示面
    隐式的几何不会告诉我们这些点在哪里,而会告诉我们这些点满足的函数关系
    在这里插入图片描述
  • 隐式的表达很难直接看出它的形状是什么
    在这里插入图片描述
  • 但是判断点的位置关系,在内在外在表面,这样很方便
    在这里插入图片描述

1.2 更多的隐式表达方法

1.2.1 代数曲面

在这里插入图片描述

1.2.2 CSG 构造实体几何

在这里插入图片描述

1.2.3 距离函数

对于任意一个几何,不直接描述表面,而是描述空间中任何一个点到这个表面的最近距离
所以空间中任何一个点都会定义出一个值来
下图把两个物体的距离函数定义出来,做一个blending就能融合
在这里插入图片描述

  • 应用距离函数的例子,SDF为距离函数 S表示signed
    在这里插入图片描述在这里插入图片描述
  • 距离函数得到后,表面怎么得到呢,也就是距离函数为0的地方为表面
    距离函数的形式比较难写解析式也没问题,像水平集这个方法也是类似的思想
    在地理上的类似定义就是等高线
    用等高线的思想找到表面
    在这里插入图片描述

1.2.4 分形几何

在这里插入图片描述

1.3 显式几何

  • 与隐式几何相对的就有显式几何
    显式的方法有直接给出点的位置,或者用参数映射
    在这里插入图片描述
  • 下图将UV这两个参数映射成了空间中的点x,y,z
    想知道表面的样子时,把每一个UV都测一遍就行,很容易得到
    在这里插入图片描述
  • 然而想要判断内外时,显式的表达表示就很难
    在这里插入图片描述

1.4 更多的显式表达方法

在这里插入图片描述

1.4.1 点云

不考虑物体是一个表面,而是表面为一堆点,只要点足够密集,就看不到点与点之间的缝隙
理论上可以表示任何几何
通常三维扫描等得到的结果就是点云
点云可以变成三角形面
在这里插入图片描述

1.4.2 多边形网格

多边形网格被非常广泛地应用
在这里插入图片描述
文件格式 obj格式 用三角形网格定义物体
在这里插入图片描述

2 曲线

2.1 贝塞尔曲线

  • 贝塞尔曲线是需要一系列的控制点去定义某一个曲线
    这个曲线满足一些性质,比如下图的要沿着切线方向
    在这里插入图片描述

2.1.1 计算贝塞尔曲线

以下介绍 de Casteljau 算法生成二次贝塞尔曲线

  • 首先定义三个点
    在这里插入图片描述
  • 根据任意的 t 插值出点
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
  • 不断重复 t在[0,1]间不断取值,这样得到一条贝塞尔曲线
    在这里插入图片描述

以下介绍 de Casteljau 算法生成三次贝塞尔曲线

  • 类似递归的算法
    在这里插入图片描述
    在这里插入图片描述

2.1.2 代数表示方法

  • 在计算三次贝塞尔曲线的过程中,我们是在每两个之间找一个时间t,相当于每两个之间线性插值
    在这里插入图片描述
  • 我们把算法过程写成代数的形式
    在这里插入图片描述
  • 我们进行推广到n阶,发现是一个描述二项分布的多项式
    在这里插入图片描述
  • 三次贝塞尔曲线的公式效果如下
    在这里插入图片描述
    在这里插入图片描述

2.1.3 贝塞尔曲线性质

  • 第一第二条很好理解
    第三条:在仿射变换下,只需要对顶点做仿射变换,就能得到这个贝塞尔曲线在仿射变换下的结果
    第四条:贝塞尔曲线在控制点形成的凸包内
    在这里插入图片描述
  • 凸包示意,保卫控制点的最小凸多边形
    在这里插入图片描述

2.1.4 逐段贝塞尔曲线

  • 控制点多了以后,贝塞尔曲线并不直观,很难控制
    在这里插入图片描述
  • 于是我们想到每次定义一段贝塞尔曲线,然后连起来
    普遍习惯每四个控制点定义一段
    在这里插入图片描述
    在这里插入图片描述

2.2 连续性

  • C0连续 点相同
    在这里插入图片描述
  • C1连续 切线相同
    在这里插入图片描述

2.3 样条曲线

  • 样条——连续的曲线,由一系列控制点控制,满足一定的连续性,也就是可控的曲线
    在这里插入图片描述
  • B样条——B,也就是basis 基函数
    具有局部性
    在这里插入图片描述
    B样条以及非均匀有理B样条 可以去看胡事民老师的课
    在这里插入图片描述

3 曲面

3.1 贝塞尔曲面

在这里插入图片描述
在这里插入图片描述
画出四条贝塞尔曲线后,在这四个线上再取四个点,认为是一个新的贝塞尔曲线的控制点
在不断扫的过程中,形成了曲面
在这里插入图片描述

3.2 计算贝塞尔曲面

通过参数映射把 u v 分别映射成 t
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

4 几何处理

4.1 网格细分

4.1.1 Loop 细分

  • 创造更多的三角形,并且改变他们的位置,让表面更光滑
    在这里插入图片描述
  • 连接各边中点,创建三角形
    区分出新老顶点再处理
    (LOOP细分的由来:创建者的姓是LOOP,不是循环的意思)
    在这里插入图片描述
  • 对于新的顶点(白色的顶点),会按照如下的公式调整位置(公式的值怎么来的涉及到具体的算法设计就不说了,我们只考虑如何执行)
    在这里插入图片描述
  • 对于旧的顶点,一部分靠周围旧的顶点的值,一部分保留自己的,按照公式移动位置
    n为顶点的度(连接的边的数量)
    u为一个和n有关的数
    在这里插入图片描述
  • 结果
    在这里插入图片描述

4.1.2 Catmull-Clark 细分

Loop细分假设的是三角形网格,但是对于非三角形网格,就没办法,这时候就要用到Catmull-Clark 细分。

  • 可以定义四边形面以及非四边形面
    如果度不为4的点 定义为奇异点
    在这里插入图片描述
  • 一次细分的过程
    取边上的中点,以及面上取一个点(重心或者其他的),把这些点连起来
    在这个过程中,引入了两个度为3的奇异点(在两个三角形中点的点),所以一共有4个奇异点
    在这个过程中,所有的面都变成了四边形面
    也就是一次细分后,每一个非四边形面消失,并会引入一个奇异点
    也就是之后的细分,不会再增加奇异点数目了
    在这里插入图片描述
  • 继续细分,奇异点不变
    在这里插入图片描述
  • 点的位置的调整,分为三类
    新的点分为 面上的点,边上的点 分别操作
    老的点单独操作
    在这里插入图片描述
  • 对比
    在这里插入图片描述

4.2 网格简化

在这里插入图片描述

  • 一种网格简化的方法 边坍缩
    在这里插入图片描述
  • 应该如何坍缩保证轮廓基本一致?
    左下为五个点平均,右下为二次误差度量
    二次误差:坍缩后的点和原本几个边(面)的距离的平方和最小
    在这里插入图片描述
  • 每一条边都假设,如果坍缩它,会导致多大的二次度量误差
    然后从二次度量误差最小的开始坍缩,从小到大
    在这里插入图片描述
  • 但是存在一些问题
    坍缩一条边可以,但是坍缩一条边之后,其他边也跟着改变了,这些 改变了的边 的二次度量误差也得重新计算
    所以我们需要从二次度量误差中选最小的,取完最小的之后,我们要对它做更新
    这种数据结构要能让我们能取到最小值,同时也能动态更新其他受影响的元素
    这种数据结构也就是 优先队列/堆
    并且我们通过对局部进行最优解,试图找到全局的最优解,也是一个典型的贪心算法
    在这里插入图片描述
    在这里插入图片描述
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值