前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【GAMES101】Lecture 10 几何表示

【GAMES101】Lecture 10 几何表示

作者头像
叶茂林
发布2024-01-29 08:50:52
980
发布2024-01-29 08:50:52
举报
文章被收录于专栏:叶子的开发者社区

隐式表示

几何的隐式表示就是用一个函数式子来表示一个几何体,像一个球可以表示成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个顶点

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024-01-28,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 隐式表示
    • 代数曲面(Algebraic surfaces)
      • CSG(Constructive solid geometry)
        • 距离函数(Distance Functions)
          • 水平集(Level set methods)
            • 分形(Fractals)
            • 显式表示
              • 点云(Point Cloud)
                • 多边形网格(Polygon Mesh)
                  • 模型文件Object File (.obj)
                  相关产品与服务
                  对象存储
                  对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
                  领券
                  问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档