Game101现代计算机图形学入门学习笔记(六)

几何

  • 一、表示几何的方法
    • 1、隐式方法
      • 1、代数曲面
      • 2、Constructive Solid Geometry(CSG)
      • 3、距离函数
      • 4、水平集
      • 5、分形几何
    • 2、显式方法
      • 1、点云
      • 2、多边形网格
  • 二、曲线
    • 1、Bezier曲线
      • 1、De Casteljau算法
      • 2、分段贝塞尔曲线
      • 3、性质
    • 2、B样条
  • 三、曲面
    • 1、Bezier曲面
  • 四、网格处理
    • 1、网格细分
      • 1、Loop细分
      • 2、Catmull-Clark细分
    • 2、网格简化
    • 3、网格规格化
  • 五、参考和引用

着色是一个将材质应用到物体的过程。

一、表示几何的方法

1、隐式方法

  • 点满足一些关系,不提供具体的坐标.
  • 比较容易判断点是否在表面内。
  • 在采样方面比较困难。
  • 适合光线与表面求交。

1、代数曲面

代数表达式表示的曲面,太复杂将很难用代数表达式来表示。

2、Constructive Solid Geometry(CSG)

对基础几何体(如圆柱、圆、立方体)进行布尔操作,如并、交、差,产生新的几何模型。

3、距离函数

  • 空间中任意一点到表面的最小距离。(有正负符号,物体内部为负,外部为正。)
  • 先计算出距离,然后通过blend操作进行。
  • 例子:
    Game101现代计算机图形学入门学习笔记(六)_第1张图片
    A和B做blend求出一个左半部为黑,右半部为白的物体。
    以A的阴影界限为0位置(即 1 3 \frac{1}{3} 31处),左右都为到0位置的距离,左在阴影内为负,右为正。B同理。然后进行blend操作得到结果。

4、水平集

  • 函数值为0的地方作为曲线。
  • 可以更加显示的区空间曲线的形状。
  • 该方法广泛的运用在医学成像和物理模拟之中

5、分形几何

分形几何是指许多自相似的形体组成的几何形状。

2、显式方法

  • 直接给出坐标,或者通过参数映射。
  • 判断点是否在表面内比较难。
  • 采样操作简单。
  • 三角形网格、Bezier曲面、细分曲面、NURBS、点云等

1、点云

  • 用一系列的点去表示几何体。
  • 点多细节多。

2、多边形网格

  • 保存点和多边形(一般是三角形或四边形)。
  • 更容易处理、模拟、自适应采样。

二、曲线

1、Bezier曲线

  • 用一系列控制点来生成一条曲线。
  • 本质是对线段的插值。
    Game101现代计算机图形学入门学习笔记(六)_第2张图片

1、De Casteljau算法

  • 三个控制点的贝塞尔曲线递归求解(二次贝塞尔曲线)。
    Game101现代计算机图形学入门学习笔记(六)_第3张图片
    b 0 1 = ( 1 − t ) b 0 + t b 1 b^{1}_0=(1-t)b_0+tb_1 b01=(1t)b0+tb1
    b 1 1 = ( 1 − t ) b 1 + t b 2 b^{1}_1=(1-t)b_1+tb_2 b11=(1t)b1+tb2
    b 0 2 = ( 1 − t ) b 0 1 + t b 1 1 b^{2}_0=(1-t)b^{1}_0+tb^{1}_1 b02=(1t)b01+tb11
    t从0到1进行插值得到曲线。
    递归重复上述过程。
    其核心就是多次的线性插值,并在生成的新的顶点所连接构成的线段之上递归的执行这个过程,直到得到最后一个顶点。
  • 伯恩斯坦形式的贝塞尔曲线
    b n ( t ) = b 0 n ( t ) = ∑ j = 0 n b j B j n ( t ) b^n(t)=b^n_{0}(t)=\sum^n_{j=0}b_jB^n_{j}(t) bn(t)=b0n(t)=j=0nbjBjn(t)
    b n ( t ) b^n(t) bn(t):n次贝塞尔曲线
    b j b_j bj:贝塞尔控制点
    B j n ( t ) B^n_{j}(t) Bjn(t):伯恩斯坦形式多项式: B j n ( t ) = ( n i ) t j ( 1 − t ) n − j B^n_{j}(t)=\left( \begin{matrix} n\\ i \end{matrix} \right) t^j(1-t)^{n-j} Bjn(t)=(ni)tj(1t)nj
    例子:
    对于四个点 b 0 , b 1 , b 2 , b 3 b_0,b_1,b_2,b_3 b0,b1,b2,b3
    b n ( t ) = b 0 ( 1 − t ) 3 + b 1 3 t ( 1 − t ) 2 + b 2 3 t 2 ( 1 − t ) + b 3 t 3 b^n(t)=b_0(1-t)^3 +b_1 3t(1-t)^2+b_2 3t^2(1-t)+b_3 t^3 bn(t)=b0(1t)3+b13t(1t)2+b23t2(1t)+b3t3

2、分段贝塞尔曲线

贝塞尔曲线在控制点较多时,调整一部分控制点也会影响到整条曲线。分段可以使调整控制点只影响局部。

3、性质

1、起点是曲线起始点,终点是终止点。
2、具有一阶导数。
3、仿射变换:通过对控制点的曲线的仿射变换实现曲线的仿射变换。
4、凸包性质:所有贝塞尔曲线会被所有控制点形成的多边形所包围

2、B样条

  • 可以对曲线进行局部修改。
  • 保持相邻曲线的连续性。
  • 满足贝塞尔曲线特性。

三、曲面

1、Bezier曲面

Bezier曲面类似Bezier曲线,用两个[0,1]范围的参数u,v插值表示。

四、网格处理

1、网格细分

将模型上的一个面分成多个面,提高分辨率,从而提升效果。

1、Loop细分

  • 只针对三角形面的细分。
    1、生成更多三角形
    在取一个三角形的三条边中点连接,将三角形划分成四个三角形。
    2、根据权值调整新生成的点的位置。

2、Catmull-Clark细分

针对一般网格。

  • 所有非四边形,被称为Non-quad face
  • 度不等于4的点为奇异点
  • 每次细分,在每个面中都添加一个点,在每条边的中点也添加一个点,面上的新顶点连接所有边上的新顶点。
  • Catmull-Clark细分的特点
    1、有几个非四边形面,就会多出几个奇异点。
    2、新多出来的奇异点的度数与原来所在面的边数相等。
    3 第一次细分之后所有面都会变成四边形,且往后奇异点数目不再增加

2、网格简化

将模型上的多个面合成一个面,降低分辨率,从而保留其形状或某些特性。

  • 所利用的一个方法叫做边坍缩。
  • 引入一个度量,即二次误差度量(Quadric Error Metrics)。
  • 坍缩之后新顶点所在的位置与原来各个平面的垂直距离的平方之和。如果能够使得这个误差最小,那么对整个模型样貌修改一定程度上也会较小。
  • 做法:
    1、 为每条边赋值,其值为最小二次误差度量。
    2、选取值最小的边做坍缩,新顶点位置为原来计算得出使得二次误差最小的位置。
    3、坍缩完之后,与之相连其他的边的位置会改动,更新这些边的权值。
    4、重复上述步骤,直到到达终止条件。

3、网格规格化

使三角形面尽量相同,从而达到提升模型效果。

五、参考和引用

[1] bilibili:GAMES101-现代计算机图形学入门-闫令琪
[2] 几何(基本表示方法).pdf
[3] 计算机图形学九:几何1—隐式曲面(代数形式,CSG, 距离函数,分型几何)与显式曲面
[4]CSDN:GAMES101-现代计算机图形学学习笔记(11)
[5]计算机图形学十:几何2—贝塞尔曲线(Bézier Curves)与贝塞尔曲面(Bézier Surfaces)
[6] 几何(曲线与曲面).pdf
[7] 几何(网格处理)、阴影图.pdf
[8]计算机图形学十一:几何3—曲面细分(Mesh subdivision)与曲面简化(Mesh Smplication)

你可能感兴趣的:(计算机图形学,学习笔记,图形学)