0%

【Games 101】Lec 10:几何 1 (入门)

Lecture 10:Geometry 1 (Introduction)

这节课主要讲:

  • 纹理的应用(放在上一篇文章了)
  • 几何的表示方法

几何的表示方法

  • 隐式的几何表示
  • 显示的几何表示

隐式的几何表示(Implicit)

概述

简单的讲就是,在空间中找到满足特定关系的点,用坐标公式表达一下;

优点:

  • 很容易判断点是否在面上。(将点代入f(x,y,z),正数表示点在图形外,负数表示点在图形内,0表示点在图形上。)
  • 表述起来很容易(对存储很有利)。
  • 容易做面与光线求交。
  • 容易描述和处理拓扑结构。

缺点:

  • 不好描述复杂的形状;
  • 不好知道这个面上有哪些点;
  • 很难从式子中看出表示的是什么形状。

分类:

  • 构造立体几何 CSG(Constructive Solid Geometry)(Implict)
  • 距离函数 Distance Function(Implict)
  • 水平集 Level Set Methods(Implict)
  • 分形 Fractals(Implict)

构造立体几何 CSG(Constructive Solid Geometry)

通过一系列基本几何的基本布尔运算来定义新的几何。

距离函数 Distance Function

给出任何一个位置到物体的最短距离。对一个点不描述表面,而是描述点到表面的最近距离。

把两个物体的距离函数都算出来然后把两个距离函数做融合(blending)

这个挺妙的;

比如:混合一个移动的边界

通过blend两个SDF可以得到移动后的边界。

分别求出两个物体对应的距离函数, 然后把他们blend起来,然后恢复成原本的面(找出SDF 的值为0的位置)

水平集 Level Set Methods

封闭形式的方程很难描述复杂的形状,所以选择一种替代方案:

存储一个值近似函数的网格(可以是二维的也可以是三维的)

通过找到插值为0的位置来找到表面,它具有一个对形状更加显示的控制。

eg:如果有一个三维的纹理表示人体不同位置的骨密度,可以让密度函数=某个具体的值,然后找到所有满足这个等式的位置,就可以得到一个表面。

分形 Fractals

局部和整体相似,一直递归;

eg:雪花,西兰花等;

这些类型的几何在渲染时会造成强烈的走样。

显示的几何表示(Explicit)

概述

所有的点直接给出,或通过参数映射定义表面。

优点:对于表示形状很容易。

缺点:不好判断点是否在表面上(或内、外)。

分类:

  • 点云 (Point Cloud)
  • 多边形网格(Polygon Mesh)

点云(Point Cloud)

  • 简单的表示为点的列表(x,y,z)
  • 可以简单的表示任何一种几何图形
  • 对于表示大数据集是很有用的(>>1 point/pixel)
  • 经常被转换成多边形网格
  • 难以在采样不足的区域画出来

多边形网格(Polygon Mesh)

  • 存储点和多边形(通常是三角形或四边形)
  • 容易去处理/模拟,进行自适应采样
  • 数据结构比较复杂
  • 图形学中最常用的表示

表示方式:The Wavefront Object File(.obj)格式

它是一个文本文件,由指定的顶点、法线、纹理坐标和它们的连接组成。

如下图表示了一个立方体:

v是顶点坐标

vn是法线(多了两条是因为建模误差)

vt是纹理坐标

f(face)表示面,比如f 5/1/1 1/2/1 4/3/1 表示这个三角形面是由第5、1、4个顶点组成的,三个点的纹理坐标是第1、2、3对应的纹理坐标,这个面的法线是第一条法线。

欢迎关注我的其它发布渠道