GAMES101-Lec10~12几何 曲线 曲面网格

news2025/1/18 4:46:32

目录

  • 1.几何的表示
    • 1.1显示
      • 1.1.1更多显示表示方法
        • 1.1.1.1点云
        • 1.1.1.2多边形网格
    • 1.2隐示
      • 1.2.1更多隐示表达法
        • 1.2.1.1代数曲面
        • 1.2.1.2 CSG
        • 1.2.1.3距离函数SDF
        • 1.2.1.4水平集
        • 1.2.1.5分型几何
  • 2.曲线
    • 2.1贝塞尔曲线
    • 2.2 计算方法
    • 2.3代数表示
    • 2.4性质
    • 2.5逐段贝塞尔曲线
  • 3.曲面
    • 3.1贝塞尔曲面
  • 4.几何处理
    • 4.1网格细分
      • 4.1.1Loop细分
      • 4.1.2Catmull-Clark 细分
    • 4.2网格简化
  • Reference

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1318174.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

如何使用Java在Excel中添加动态数组公式?

本文由葡萄城技术团队发布。转载请注明出处:葡萄城官网,葡萄城为开发者提供专业的开发工具、解决方案和服务,赋能开发者。 前言 动态数组公式是 Excel 引入的一项重要功能,它将 Excel 分为两种风格:Excel 365 和传统 …

C语言使用posix正则表达式库

在C语言中&#xff0c;你可以使用 POSIX 正则表达式库&#xff08;regex.h&#xff09;来进行正则表达式的模式匹配。POSIX 正则表达式库提供了一组函数来编译、执行和释放正则表达式。 下面是使用 POSIX 正则表达式库的基本步骤&#xff1a; 包含头文件 <regex.h>&…

C语言——完数难题(头歌编程刷题)

归纳编程学习的感悟&#xff0c; 记录奋斗路上的点滴&#xff0c; 希望能帮到一样刻苦的你&#xff01; 如有不足欢迎指正&#xff01; 共同学习交流&#xff01; &#x1f30e;欢迎各位→点赞 &#x1f44d; 收藏⭐ 留言​&#x1f4dd; 生命如同寓言&#xff0c;其价值不在于…

【react.js + hooks】基于事件机制的跨组件数据共享

跨组件通信和数据共享不是一件容易的事&#xff0c;如果通过 prop 一层层传递&#xff0c;太繁琐&#xff0c;而且仅适用于从上到下的数据传递&#xff1b;建立一个全局的状态 Store&#xff0c;每个数据可能两三个组件间需要使用&#xff0c;其他地方用不着&#xff0c;挂那么…

软件设计师——计算机组成原理(三)

&#x1f4d1;前言 本文主要是【计算机组成原理】——软件设计师——计算机组成原理的文章&#xff0c;如果有什么需要改进的地方还请大佬指出⛺️ &#x1f3ac;作者简介&#xff1a;大家好&#xff0c;我是听风与他&#x1f947; ☁️博客首页&#xff1a;CSDN主页听风与他 …

解决nuxt3报错:The requested module xxx does not provide an export named ‘PropType‘

现象如下&#xff1a; 从表象上就是typescript找不到PropType的类型声明 原因&#xff1a;这是vue3已知的type类型导入时存在的一个问题&#xff0c;而且一直没有得到解决 No matching export for import typescript interface Issue #2117 vitejs/vite GitHub 代码里面导…

人工智能强化学习:智能体自我进化的探索与挑战

导言 人工智能强化学习作为一种模仿人类学习方式的技术&#xff0c;近年来在机器学习领域取得了令人瞩目的进展。强化学习作为一种通过智能体与环境的交互学习的技术&#xff0c;与其他模型的融合不仅可以提升学习效果&#xff0c;还能在更广泛的领域中实现智能体的决策。本文将…

python学习,1.变量和简单的数据类型

一、编写文章的目的 1.这是为了初学者而写的&#xff0c;学习python比较简单然后上手&#xff0c;也会过滤一些&#xff0c;如果没有提起到的&#xff0c;可以在学习的时候进行补充 2.相对来说&#xff0c;上手难度不会很难。 二、内容 1.让首字母大写&#xff1b;字母都大写…

Linux查看进程PID以及杀掉进程的方法

目录 参考链接 前言 查看进程PID PS命令 ps -le命令 查找父进程 杀死进程 参考链接 【Linux 】 ps命令详解&#xff0c;查看进程pid_linux查看pid 对应的程序-CSDN博客 Linux查看进程PID的方法&#xff08;linux查进程的pid&#xff09;附带自动kill 掉_linux查看pid 对…

大数据分析与应用实验任务十二

大数据分析与应用实验任务十二 实验目的&#xff1a; 通过实验掌握spark机器学习库本地向量、本地矩阵的创建方法&#xff1b; 熟悉spark机器学习库特征提取、转换、选择方法&#xff1b; 实验任务&#xff1a; 一、逐行理解并参考编写运行教材8.3.1、8.3.3节各个例程代码…

linux脚本中 #!/bin/sh、#!/bin/bash

我们通常看到的脚本文件总是有以下这样的开头&#xff1a; #!/bin/bash本文解释一下这是什么&#xff0c;以及为什么要写它。 首先解释一下 #! &#xff0c;因为 #!有个专有的名词&#xff0c;叫 shebang 发音类似中文的 “蛇棒” 。为什么叫 shebang 呢&#xff1f; 首先 #…

【面向对象】C++/python/java的多态比较

一、面向对象的主要特点 封装&#xff1a;封装是把数据和操作数据的方法绑定在一起&#xff0c;对数据的访问只能通过已定义的接口。这可以保护数据不被外部程序直接访问或修改&#xff0c;增强数据的安全性。继承&#xff1a;继承是一种联结类的层次模型&#xff0c;并且允许…

1850_emacs_org-download在Windows上的使用

Grey 全部学习内容汇总&#xff1a; https://github.com/greyzhang/g_org 1850_emacs_org-download在Windows上的使用 对我来说&#xff0c;使用emacs很大的一个挑战是在Windows上&#xff0c;emacs的配置会比Linux上麻烦一些。而且&#xff0c;通常来说Windows上的体验会差…

SQL进阶理论篇(九):为什么不存在完美的索引

文章目录 简介索引片和过滤因子如何通过宽表避免回表什么是过滤因子理想索引设计&#xff1a;三星索引为什么很难存在理想的索引设计&#xff1f;参考文献 简介 本节将主要介绍以下部分&#xff1a; 什么是索引片&#xff0c;什么是过滤因子&#xff1f;设计索引的时候&#…

Python装饰器新境界:详解装饰器重载内置操作

更多Python学习内容&#xff1a;ipengtao.com 大家好&#xff0c;我是彭涛&#xff0c;今天为大家分享 Python装饰器新境界&#xff1a;详解装饰器重载内置操作&#xff0c;全文3900字&#xff0c;阅读大约15分钟。 Python装饰器重载内置操作&#xff0c;我们通常指的是使用装饰…

Sqoop安装与配置-shell脚本一键安装配置

文章目录 前言一、使用shell脚本一键安装1. 复制脚本2. 增加执行权限3. 执行脚本4. 加载用户环境变量5. 查看是否安装成功 总结 前言 本文介绍了如何使用Shell脚本一键安装Sqoop。Sqoop是一个用于在Apache Hadoop和结构化数据存储&#xff08;如关系数据库&#xff09;之间传输…

Source Insight使用

之前一直使用VS code阅读kernel源码&#xff0c;有时候函数跳转有些问题。最近换成了Source Insight软件&#xff0c;发现真不错。就是需要一些学习成本&#xff0c;简单记录一下如何使用吧。 1、下载安装&#xff1a; 首先肯定是要下载安装&#xff0c;这个就不写了&#xf…

FFmpeg——在Vue项目中使用FFmpeg(安装、配置、使用、SharedArrayBuffer、跨域隔离、避坑...)

个人简介 &#x1f440;个人主页&#xff1a; 前端杂货铺 &#x1f64b;‍♂️学习方向&#xff1a; 主攻前端方向&#xff0c;正逐渐往全干发展 &#x1f4c3;个人状态&#xff1a; 研发工程师&#xff0c;现效力于中国工业软件事业 &#x1f680;人生格言&#xff1a; 积跬步…

滑动窗口训练

1.原理 我们用这道题目 LCR 008. 长度最小的子数组 来讲解“滑动窗口”的解法。 1.1.暴力解法 遍历每一个子数组&#xff08;都要大于等于 7&#xff09;&#xff0c;最统计出最小的数组。 这样做的话&#xff0c;划分左右区间&#xff08;left 和 right&#xff09;就需要…

怎样长时间保持SSH会话连接不断开?

操作场景 使用SSH方式登录CentOS Stream操作系统的云服务器时&#xff0c;过一段时间就会自动断开连接。 该文档适用于CentOS/EulerOS系统。 操作方法 编辑/etc/ssh/sshd_config文件设置心跳&#xff0c;保持连接。 编辑/etc/ssh/sshd_config&#xff0c;添加配置项&#x…