[计算机图形学]几何:隐式显式表示(前瞻预习/复习回顾)

news2024/11/20 10:40:09

一、前言

本篇我们将开启GAMES101几何部分的讲解的第一讲解,也是几何的基本表示,现实中有非常多的几何,如布料,绝对光滑的曲面,水滴,毛发,微观的细胞等等非常复杂的几何,那么如何在计算机中表示这些几何呢?本篇我们将会介绍两种几何的基本表示方法,分别是隐式表示显式表示

二、几何的隐式表示

隐式的几何表示,简单的说,就是不给出顶点或面的具体位置信息,而告诉点之间满足的关系,而推广之后我们完全可以用函数表示这一关系,如:f(x,y,z)=0,那就可以说明点在几何上。

但是隐式表示并不直观,根据一个及其复杂的公式,我们很难直接判断它表示的是什么形状。当然隐式表示也有好处,我们完全可以根据公式判断点在几何外/上/内,就比如f(x,y,z)>0,那么就说明点在几何外,小于则在几何内,等于则恰好在几何上。

接下来我们将介绍几种常见的隐式表示方法。

1.数学公式

第一种,数学公式,我们前面说了,很不直观,而且如果对于过于复杂的几何,想写出公式是很难的。

2.Constructive Solid Geometry—构造性立体几何(CSG)

如图所示,这种方法就是用不同简单的几何,在它们之间使用交,并,差等布尔运算从而形成复杂的几何的方法。通过简单的几何运算进而生成复杂的几何。

3.Distance Functions—距离函数

 第三中方法叫做距离函数,对于任何一个几何,我们都不直接描述它的表面,我们去描述任何一个点到这个表面的最近距离,如上图的两个球融合的过程。

其中距离函数表示的就是空间中的任何一个点到我们想要描述的几何上的任何一个点在空间中的最小距离。这个距离可正可负,只是在几何内外的区别。

上图中两个球融合的过程则是分别算出两球的距离函数,然后将它们混合在一起,再把它恢复成原来的物体形成的过程。

下面通过闫令琪老师的例子解释,如上图中的A,B两张图分别左边被一块阴影挡住,那么怎么描述A左边1/3阴影扩大到B左边2/3阴影的中间过程呢?如果我们单纯的对A,B两张图做blend操作,那么得出的结果显然是不对的,结果会在左1/3是两张图叠在一起,中间1/3是只有B的阴影,而右1/3则是空白。

那么我们对两张图的距离函数做blend操作呢?我们假设阴影的边界是我们表示的几何,那么它的距离函数的值应该分布在阴影边界的两边,我们假定左边是负值,右边是正值,那么线本身则为0,可以看到我们进行blend操作后,第三张图的阴影边界的距离函数值就是0,也就是说我们得到了中间的过程。这也证明了我们对它们的距离函数blend就是对它们的边界blend。

4.Level Set Methods—水平集

我们可以通过找到混合后的距离函数为0的点来恢复几何的表面,那么当混合后的距离函数不是那么容易用式子所标示出来的时候呢?我们可以通过其他定义方式来表示这个混合后的距离函数,如上图所示的水平集方法,把距离放在空间分成的格子中,而f(x)=0这条线就可以通过插值的方式来确定了。水平集的方法也得到了很多应用,如地理上的等高线。

水平集方法当然不仅仅只应用在二维空间,还可以应用在三维空间,如上图中的人体扫描图,这可以和我们之前说到的三维纹理结合起来,同时我们还可以描述上图中的水滴四溅时涟漪中连起来的水滴,并且通过水平集得出它们的样子。

5.分形—Fractals

 分形,指自相似,自己的一个部分和自己长得很像,也就是递归。如六边形的雪花每一分支又是一个六边形。这种几何在渲染中表示很困难,会产生严重的走样。

三、几何的显式表示

显示的表示方法,要么直接给出,要么通过参数映射给出,如上图的马鞍面就是用参数映射的方式表示出来的,定义一个二维uv坐标,uv的每个坐标都对应了三维空间中的一个点(x,y,z),那么只需要逐行扫描一遍这个uv,就可以得出三维空间中的马鞍面了。显式几何缺点:难以确定点和几何的位置关系。

 通过uv参数映射的圆环(f(u,v)和等式右边即为参数映射的公式)

1.Point Cloud—点云

点云实际上就是不直接表示几何的面,而是变成一堆点,而只要点足够多足够密,就可以直观的看到几何的表面了,点云方法可以表示任何几何,只要点足够多。本质上是存储一系列点三维坐标的列表。而人们也可以通过一些方法,把点云表示的几何还原成多边形面表示的几何。 

2.Polygon Mesh—多边形面

 多边形面表示法是图形学中应用最多的显式表示法,它把任何的几何都拆成三角形/四边形来表示,同时也是更为复杂的一种数据结构,包括不同的点,线,面的连接组成关系等等。

上图表示的是obj模型文件用文本方式打开的形式,也就是模型的一种存储形式。obj存储形式就是定义了模型所有的顶点坐标,纹理坐标,法线坐标,并且定义了那些顶点组成一个面,把它们组合在一起来表示一个模型。如上图中表示了一个立方体的模型:v代表顶点坐标,有8个有效值,,vn代表了6个面的不同的法线坐标,,vt则为纹理坐标,f则别代表了—连成三角形的点/纹理坐标/法线。

参考:

Lecture 10 Geometry 1 (Introduction)_哔哩哔哩_bilibili

Lecture 11 Geometry 2 (Curves and Surfaces)_哔哩哔哩_bilibili

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

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

相关文章

十分钟在 macOS 快速搭建 Linux C/C++ 开发环境

有一个使用了 Epoll 的 C 项目,笔者平时用的 Linux 主力开发机不在身边,想在 macOS 上开发调试,但是没有 Linux 虚拟机。恰好,JetBrains CLion 的 Toolchains 配置除了使用本地环境,还支持 SSH、Docker。 笔者使用 CL…

Zabbix的介绍与部署

目录 zabbix zabbix简介 zabbix主要功能 zabbix主要特点 zabbix运行机制 zabbix架构 1.sever-client架构 2.sever-proxy-client架构 3.master-node-client架构 如何进行数据采集 zabbix工作原理 zabbix监控模式 安装zabbix5.0 部署zabbix服务端 web页面测试 部…

系统集成项目管理工程师 笔记(第二章:信息系统集成及服务管理)

文章目录2.3.1 ITIL与IT服务管理(ITSM) 117ITSM三个根本目标2.3.2 ITSS与信息技术服务 121ITSS的4个组成要素和5个生命周期2.3.3 信息系统审计 127信息系统审计是建立在以下 4 个理论基础之上的信息系统审计流程示意图审计步骤第2章 信息系统集成及服务管…

怎么设置动态壁纸?这样做就行!

案例:怎么设置动态壁纸 【朋友们,我的壁纸一直都是静态的,最近感觉有点审美疲劳了,想换些好看的动态壁纸,有朋友知道应该如何设置动态壁纸吗?】 经常使用电脑的朋友可能会觉得一直用同一张壁纸会感觉审美…

通过两阶段知识学习多种不利天气排除

论文:Learning Multiple Adverse Weather Removal via Two-stage Knowledge Learning and Multi-contrastive Regularization: Toward a Unified Model【通过两阶段知识学习多种不利天气排除】 论文下载地址:https://openaccess.thecvf.com/content/CVP…

过去的90天,ODC 发生了哪些新的改变?

欢迎访问 OceanBase 官网获取更多信息:https://www.oceanbase.com/ 关于作者 胡智娟 OceanBase 产品经理 主要负责 OceanBase 生态工具数据研发、迁移评估方向的产品工作,在蚂蚁集团有多年数据库管理实战经验,对日常研发及运维痛点有较深感悟…

个人-计算机操作系统第五章

第五章 虚拟存储器 一、章节练习 1.系统抖动是指( )。 A. 使用机器时,千万屏幕闪烁的现象 B. 刚被调出的页面又立刻被调入所形成的频繁调入调出现象 C. 系统盘不净,千万系统不稳定的现象 D. 由于内存分配不当,偶然造成内存不够…

史上最全的快速排序方法--Hoare快排 挖坑法快排 二路快排 三路快排 非递归快排

一.快速排序 1.基本介绍 快速排序(Quicksort)由英国计算机科学家Tony Hoare于1959年发明,是一种经典的排序算法,被广泛应用于计算机科学领域。快速排序(Quick Sort)是一种常见的基于比较的排序算法&#…

阿里云李飞飞:数据库将迎来“四化”趋势

伴随着数字经济的高速发展,越来越多的企业管理者都开始认识到数据才是企业最宝贵的资产,并为此不断加速企业的数字化转型与升级。而在数据库领域,云原生已经当仁不让地成为了当下最炙手可热的技术趋势之一。那么在云原生的时代大潮之下&#…

C++ STL之string容器

目录一、C与C字符串的差别二、string类对象的容量操作三、string类中的常见API总览1.构造2.赋值重载赋值操作符 成员函数 assign3.存取重载下标获取操作符 [ ]成员函数 at4.拼接重载复合操作符 成员函数 append5.查找成员函数 find成员函数 rfind成员函数 replace6.比较成员函数…

python接口自动化测试 之mock模块基本使用介绍

目录 mock作用 解决依赖问题,达到解耦作用 模拟复杂业务的接口 单元测试 前后端联调 mock类解读 mock实际使用 一个未开发完成的功能如何测试? 一个完成开发的功能如何测试? mock装饰器 mock作用 解决依赖问题,达到解耦…

AutoCAD2021安装教程图解+系统要求

AutoCAD2021具有完善的图形绘制功能,是一款非常实用的CAD图形制作软件,这款软件在业内也拥有极高的知名度,基本上绘图专业相关人员都会使用这款软件,来进行设计绘图。在软件中,为用户打造了超多实用的工具,…

python学习路线图(2023详细版)建议收藏

Python是一种面向对象的程序设计语言,由Python3演变而来,Python的目标是简单、可扩展并且高效。Python可以作为 Web应用程序、桌面应用程序和桌面 Web应用程序开发的理想语言,并且有很多优点它可以使用一些简单的参数和函数、Python支持多种数…

【Linux 网络编程5】网络/数据链路层--IP协议,MAC帧协议和ARP协议

IP协议格式和字段含义4位版本:IPv4或者Ipv6(他们两个不兼容);4位首部长度:报头首部长度*4;8位服务类型:3位优先权字段(已经弃用), 4位TOS字段, 和1位保留字段(必须置为0); 4位 TOS分别表示: 最小延时, 最大…

【SpringCloud】1、服务网关Gateway

这里写目录标题1.网关的介绍2.GateWay2.1 GateWay介绍1.网关的介绍 大家都知道在微服务架构中, 一个系统会被拆分为很多个微服务, 那么作为客户端要如何去调用这么多的微服务呢? 如果没有网关的存在, 我们只能在客户端记录每个微服务的地址, 然后分别去调用 这样的架构, 会…

2023-04-14 使用纯JS实现一个2048小游戏

文章目录一.实现思路1.2048的逻辑2.移动操作的过程中会有三种情况二.代码部分:分为初始化部分和移动部分1.初始化部分1.1.生成第一个方块:1.2.生成第二个方块:2.移动过程部分:三.实现代码1.HTML部分2.CSS部分3.JS部分3.1.game对象的属性3.2.game对象的start方法3.3.game对象的r…

材料科学基础学习指导-吕宇鹏-名词和术语解释-第5章:相图

目录 第一部分 第二部分​​​​​​​ 第三部分 第四部分​ 第一部分 1.1组元:是材料科学中的基本术语。意思是组成合金的独立的、最基本的单元。 1.2相: 指合金中具有同一聚集状态、同一晶体结构和性质并以界面相互隔开的均匀组成部分。​​​​…

【DS】河南省第十三届ICPC大学生程序设计竞赛 J-甜甜圈

明天就要省赛了,感觉已经寄了捏 J-甜甜圈_河南省第十三届ICPC大学生程序设计竞赛(重现赛) (nowcoder.com) 题意: 思路: 直接模拟复杂度太高,因此考虑用DS优化 我们考虑用树状数组维护 在用线段树和树状…

python 填充Word文档模板 循环填充表格、图片 docxtpl、 jinja2

python 填充Word文档 循环填充表格、图片codeword模板input.txt 内容参考code from docxtpl import DocxTemplate, InlineImage from docx.shared import Inches, Cm, Mm import jinja2word_template tpl.docx out_word_file new_test.docx input_file "input.txt&quo…

【机器学习】决策树(实战)

决策树(实战) 目录一、准备工作(设置 jupyter notebook 中的字体大小样式等)二、树模型的可视化展示1、通过鸢尾花数据集构建一个决策树模型2、对决策树进行可视化展示的具体步骤3、概率估计三、决策边界展示四、决策树的正则化&a…