计算机图形学笔记 || 建模与消隐

一、三维物体的数据结构

数据结构:顶点表、边表、面表;不管是凸多面体还是曲面体,只要给出顶点表和面表数据文件,就可以正确地确定数据结构。

三维用户坐标系为右手坐标系。

几何信息:描述几何元素空间位置的信息;

拓扑信息:描述几何元素之间相互连接关系的信息;

一般场景中,常见的三维物体大多数都是一些柏拉图多面体(正多面体:4,6,8,12,20),球,柱体,椎体,环这类;立方体是凸多面体,满足欧拉公式:V(顶点数)+F(面数)-E(边数)=2。

对偶多面体:若多面体的每个顶点均能对应到另一种多面体上的每个面的中心,二者互称为对偶多面体。

实体的描述模型有线框、表面、实体三种;

  1. 线框模型:只用几何体边线表示外形,用顶点表和边表两个数据结构就可以描述。优点是可以产生任意方向的视图,常用于绘制三视图或斜轴测图等;缺点:易产生二义性。
  2. 表面模型:优点:可以对物体表面进行平面着色或光滑着色,添加光照、纹理等效果;缺点:无法进行实体之间的并、交、差运算。
  3. 实体模型:在封闭的表面模型内部进行填充,拥有体积、质量等真实性。记录了顶点的信息以及线、面、体的拓扑信息。仅使用顶点表和面表。

二、消隐算法分类

根据消隐方法

  1. 隐线算法:主要针对线框模型提出
  2. 隐面算法:主要针对表面模型提出,一般使用指定颜色填充物体的各可见表面。

根据消隐空间

  1. 物体空间的消隐算法:以场景中的物体为处理单元。
    for(所有物体)
    {
        与其他物体比较,确定可见部分;
        显示;
    }

     

  2. 图像空间的消隐算法:以窗口内的每个像素为处理单元。
    for(所有像素)
    {
        确定距视点最近的物体;
        以该物体表面颜色来显示像素;
    }

     

  3. 物像空间算法:在描述物体的三维观察空间和二维图像空间中同时进行消隐。

三、隐线算法

凸多面体消隐算法(背面剔除算法):对于任意一个面,根据其外法矢量视矢量夹角来进行可见性检测。当夹角在[0,90]时,该面可见;(90,180]时,该面不可见。视矢量从多边形的参考点V_{4}指向视点。n·s≥0是基本条件。

曲面体消隐算法:用外法矢量和视矢量的数量积进行可见性检测。球面可用α参数簇和β参数曲线簇所构成的四边形经纬网格表示;当n·s≥0时,绘制该面片。

四、隐面算法

深度缓冲器算法(Z-Buffer算法)

算法思想:计算当前准备写入帧缓冲器的像素的深度值,并与已经存储的原可见像素的深度值进行比较,若当前小于原像素深度值,则将当前像素的颜色写入帧缓冲器,同时用当前像素的深度值更新深度缓冲器,否则不作更改。

算法原理:在图像空间中根据每个像素的深度值确定最终绘制的物体表面上各个像素的颜色,属于图像空间消隐算法。建立两个缓冲器,深度缓冲器:用以存储图像空间中每一个像素相应的深度值,初始化为最大深度值(z_{s}坐标);帧缓冲器:用以存储图像空间中每一个像素的颜色,初始化屏幕背景色。

算法实质:是对一给定视线上(x_{s},y_{s}),查找离视点最近的z_{s}(x_{s},y_{s})值,一般在使用深度缓冲器算法之前,先使用背面剔除算法对物体的不可见表面进行剔除,然后再对所有可见表面使用深度缓冲算法消隐。

算法描述:

  1. 帧缓冲器初始值置为背景色;
  2. 确定深度缓冲器的宽度、高度和初始深度,一般将初始深度值置为最大深度值;
  3. 对于多边形表面中的每一像素(x_{s},y_{s})计算深度值z_{s}(x_{s},y_{s})
  4. z_{s}(x_{s},y_{s})与存储在z缓冲器中该位置的深度值zBuffer(x_{s},y_{s})进行比较;
  5. 如果z_{s}(x_{s},y_{s})≤zBuffer(x_{s},y_{s}),则将此像素的颜色写入帧缓冲器,且用z_{s}(x_{s},y_{s})重置zBuffer(x_{s},y_{s})

计算深度:一般采用增量法

优点:计算简单,有利于硬件实现,节省时间;

缺点:占用了大量存储单元

深度排序算法(画家算法)

算法原理:先把屏幕置成背景色,再把物体的各个面按离视点的远近排序形成深度优先级表,远者位于表头,按照从表头到表位的顺序绘制各个面。

你可能感兴趣的:(CG)