【GAMES101】Lecture 10 几何表示

目录

隐式表示

代数曲面(Algebraic surfaces)

CSG(Constructive solid geometry)

距离函数(Distance Functions)

水平集(Level set methods)

分形(Fractals)

显式表示

点云(Point Cloud)

多边形网格(Polygon Mesh)

模型文件Object File (.obj)


隐式表示

几何的隐式表示就是用一个函数式子来表示一个几何体,像一个球可以表示成x²+y²+z²=1,即可以用f(x,y,z)=0这样的函数关系来表示,f=x²+y²+z²-1

这样这个隐式表示对于任何一个点计算出f的结果就可以知道这个点是在几何体内部还是外部,如果f的值小于0,我们就把它当作在几何体内部,如果大于0,就当作在几何体外面,当然如果等于0那就是在几何体表面

但是这个隐式表示有一个它的缺点就是很难知道有哪些点在这个几何体上

相对而言要知道某一个点和这个几何体的位置关系就很简单,只需要带入f计算就行

隐式表示方法有这个代数曲面(Algebraic surfaces)、CSG(Constructive solid geometry)、水平集(Level set methods)和分形(Fractals)

代数曲面(Algebraic surfaces)

就是可以用一个简单的多项式式子可以表示几何体,但是对于复杂的形体就很难表示了,像这个球体、圆环体还有这个心形都可以用一个简单的式子表示出来,但是这头奶牛呢?

CSG(Constructive solid geometry)

这个CSG就是用一些基本的几何体通过一些基本的布尔操作组合出来几何体,简单的通过这个并、交、差来形成不同的几何体

距离函数(Distance Functions)

所谓距离函数,指的是这样一个东西,对于空间中的点,我都给他计算出一个值,这个值是这个点到这个几何体表面的最短距离,并且如果这个点在几何体表面外,这个距离为正,在几何体表面内,这个距离为负,这个可以用来实现两个物体的融合过程

注意这个融合过程,比较不好理解,我查了很多资料目前还是一知半解,先讲一个简单的融合边界问题,有这个A和B,SDF是Signed Distance Function,就是带符号的距离函数,这个A的边界在三分之一处,B的边界在三分之二处,那么SDF边界距离当然是0,然后往两边是负数和正数走,这个融合这里就简单相加,那么新的边界会出现在中间,那这个就是边界融合后的效果

具体到两个物体的边界融合,空间中点的距离取到两个物体表面的最短距离再减去一个值作为这个融合后的SDF,那么当两个物体之间的距离小于某个值,那么这两个物体就会开始接触

实际操作可以看这个的实现 Combination SDF (shadertoy.com)

水平集(Level set methods)

这个水平集和SDF基本一样,也都是表示这个距离的方式,可能SDF的式子不好找,但是这些离散点的距离值还是可以知道的,那就记录下来,类似于等高线,是用双线性插值出来为0的地方就是物体的表面

分形(Fractals)

这个分形几何说的是这样一种几何体:部分和整体很像,跟递归一样,比方说这个西兰花,它的一小块和它本身长的差不多,一小块的一小块又和一小块差不多,那这种分形就很容易出现这个走样的问题

显式表示

对于一个几何体的显式表示,就是说我们可以知道有哪些点是在这个几何体上的,比如说把所有的几何体上的点都给出来了,或者说通过一种参数映射的方式,就是给一个(u,v)到(x,y,z)的一一映射,那我可以确定这个几何体上的点,这个就是显示表示

那自然我想要知道哪些点在这个几何体上这个事情就很容易知道了

那什么事情变得困难了,要知道某个点在不在这个几何体上,在里面还是外面?这个事情变得困难

点云(Point Cloud)

这个几何体可以直接通过一堆点来表示,叫点云,如果一堆点采样足够高,看起来就会像是一个物体的表面

多边形网格(Polygon Mesh)

通过把一个复杂的几何体拆分成多个三角形组合而成,这是最常用的方法

模型文件Object File (.obj)

存储模型的文件,obj文件,比方说一个正方体物体,有8个顶点,那么会存储下8个顶点的位置,如3-10行的v,然后会有六个面,会记录下每个面的法线,如27-43行的vn,这里不止6行是因为有冗余,存在数据重复,还有每个三角形顶点的纹理12-25行,剩下的f行是记录渲染的三角形的三个顶点,例如1/2/3,说的是第1个顶点,用的第2个纹理,用的第3个法线,即(顶点,纹理,法线)

不知道对不对哈,闫老师说的我有点怀疑,然后我去搜了一下,综合各种资料,vn确实是面法线,vt是纹理坐标,正方体就是有14个纹理坐标,因为正方体展开就是有14个顶点

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

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

相关文章

【Android】MediaCodec学习

在开源Android屏幕投屏代码scrcpy中,使用了MediaCodec去获取和display关联的surface的内容,再通过写fd的方式(socket等)传给PC端, MediaCodec的处理看起来比较清楚,数据in和数据out 这里我们做另外一个尝试…

计算机网络(第六版)复习提纲16

三 IP地址与MAC地址 1 IP层只能看到IP数据报 2 路由器只根据目的IP地址进行转发 3 局域网的链路层只能看到MAC帧 4 IP层抽象的互联网屏蔽了下层的复杂细节,在网络层讨论问题能够使用统一的、抽象的IP地址来研究主机和主机或路由间的通信 问题: 1 主机或路…

AI嵌入式K210项目(19)-安装CanMV IDE开发软件

文章目录 前言一、软件下载安装二、软件简介三、设备连接四、在线模拟五、开机运行程序附录:MicroPython固件烧录总结 前言 前几章我们介绍K210使用C语言裸机开发方法,大家对K210内部的硬件和各种加速器有了初步的了解,但是开发人工智能相关…

TypeScript(四) 运算符

1. 运算符 1.1. 描述 运算符用于执行程序代码运算。 1.2. 运算符主要包括: (1)算术运算符 (2)逻辑运算符 (3)关系运算符 (4)按位运算符 (5)赋值…

C++异步编程

thread std::thread 类代表一个单独的执行线程。在创建与线程对象相关联时,线程会立即开始执行(在等待操作系统调度的延迟之后),从构造函数参数中提供的顶层函数开始执行。顶层函数的返回值被忽略,如果它通过抛出异常…

内部类 --java学习笔记

内部类 是类中的五大成分之一(成员变量、方法、构造器、内部类、代码块),如果一个类定义在另一个类的内部,那么这个类就是内部类当一个类的内部包含了一个整体的事务,且这个事务没必要单独设计时,就可以把…

(十三)centos7案例实战——用户、用户组及用户权限管理

前言 对于完备的centos系统来说,创建一套规范的账户权限系统是十分必要的。针对不同的用户提供不同的操作权限,避免直接使用root账号,造成系统的误操作,导致一些不必要的损失,将删库跑路扼杀在摇篮中。本节内容会从用…

基于springboot校园台球厅人员与设备管理系统源码和论文

在Internet高速发展的今天,我们生活的各个领域都涉及到计算机的应用,其中包括校园台球厅人员与设备管理系统的网络应用,在外国管理系统已经是很普遍的方式,不过国内的管理网站可能还处于起步阶段。校园台球厅人员与设备管理系统具…

五、C#与数据库交互(数据存储过程与触发器)

在C#中与数据库交互时,除了基本的查询和更新操作,还经常需要使用存储过程和触发器。下面我将简要介绍如何在C#中使用存储过程和触发器。 存储过程 存储过程是一组为了完成特定功能的SQL语句集,它可以被存储在数据库中,并可以被调…

Fastbee物联网项目新手快速入门

一,前提条件 后端环境准备如下: 正式环境推荐硬件资源最低要求4c8G,硬盘40G。JDK 1.8.0_2xx (需要小版本号大于200) 。Maven3.6.3。(IDEA启动时使用IDEA默认自带的版本即可)。 启动fastbee之前,请先确定…

课时6:编程语言逻辑

1.2.2 编程语言逻辑 学习目标 这一节,我们从 语言分类、编程逻辑、小结 三个方面来学习。 语言分类 语言分类 低级编程语言:机器:- 二进制的0和1的序列,称为机器指令。- 一般人看不懂汇编:- 用一些助记符号替代机…

LPC804开发(4.ctimer使用)

1.前言 昨天晚上画完板子,还剩点时间就再翻了翻手册,大致清楚了时钟树的运行,顺带搞清楚了定时的使用,那就出一份教程吧。 如果各位在此之前没有接触过LPC单片机,还是建议先把程序直接贴进自己的项目,稍微…

“拔叔”的新片又杀疯了!

近,“拔叔”麦斯米科尔斯的新片登上口碑榜。 该片曾入围去年威尼斯金狮奖,上映后颇受好评,目前豆瓣评分8.2分。 将代表丹麦角逐2024年奥斯卡最佳外语片,目前已入15强。 作为“丹麦最性感的男人”,拔叔的实力不容小觑。…

Logistics 逻辑回归概念

1. sigmoid函数 逻辑回归算法的拟合函数,叫做sigmoid函数: 函数图像如下(百度图片搜到的图): sigmoid函数是一个s形曲线,就像是阶跃函数的温和版,阶跃函数在0和1之间是突然的起跳,…

Spring Boot常用的注解有哪些

Spring Boot常用的注解有: SpringBootApplication:用于标记Spring Boot应用的主类,通常放在启动类上,相当于同时使用Configuration、EnableAutoConfiguration和ComponentScan。 ComponentScan:用于自动扫描并注册Bean…

刷题09 双指针

2540. 最小公共值 给你两个整数数组 nums1 和 nums2 ,它们已经按非降序排序,请你返回两个数组的 最小公共整数 。如果两个数组 nums1 和 nums2 没有公共整数,请你返回 -1 。 如果一个整数在两个数组中都 至少出现一次 ,那么这个整…

std::for_each

std::for_each 是 C STL 中的标准函数之一&#xff0c;用于对指定的容器或序列中的元素执行指定的操作。该函数的头文件为 <algorithm>&#xff0c;定义在 namespace std 中&#xff0c;因此需要包含该头文件才能使用该函数。 std::for_each 函数是 C STL 中自 C98 就开…

「优选算法刷题」:汉明距离

一、题目 两个整数之间的 汉明距离 指的是这两个数字对应二进制位不同的位置的数目。 给你两个整数 x 和 y&#xff0c;计算并返回它们之间的汉明距离。 示例 1&#xff1a; 输入&#xff1a;x 1, y 4 输出&#xff1a;2 解释&#xff1a; 1 (0 0 0 1) 4 (0 1 0 0)↑ …

【JavaSE篇】——类和对象

目录 &#x1f393;类定义和使用 &#x1f393;简单认识类 &#x1f6a9;类的定义格式 ❗注意事项 &#x1f393;类的实例化 &#x1f6a9;什么是实例化 &#x1f6a9;类和对象的说明 &#x1f393;this引用 &#x1f6a9;为什么要有this引用 &#x1f6a9;什么是thi…

【JavaScript 基础入门】02 JavaScrip 详细介绍

JavaScrip 详细介绍 目录 JavaScrip 详细介绍1. JavaScript 是什么2. JavaScript的作用3. HTML/CSS/JS 的关系4. 浏览器执行 JS 简介5. JavaScript 的组成6. JavaScript 的特点 1. JavaScript 是什么 JavaScript&#xff0c;通常缩写为 JS&#xff0c;是一种高级的&#xff0c;…