第四章 图形的表示与数据结构
如何在计算机中建立恰当的模型表示不同图形对象。
如何组织图形对象的描述数据以使存储这些数据所要的空间最省,检索、处理这些数据的速度较快。
基本概念——几何信息与拓扑信息
刚体运动:不改变图形上任意两点间的距离,也不改变图形的几何性质的运动。
拓扑运动:允许形体作弹性运动,即在拓扑关系中,对图形可随意地伸张扭曲。但图上各个点仍为不同的点,决不允许把不同的点合并成一个点。
基本概念——坐标系
建模坐标系(Modeling Coordinate System)
用户坐标系
观察坐标系(Viewing Coordinate System)
规格化设备坐标系(Normalized Device coordinate System)
设备坐标系(Device Coordinate System)
基本概念-实体
点的领域:如果P是点集S的一个元素,那么点P的以R(R>0)为半径的领域指的是围绕点P的半径为R的小球(二维情况下为小圆)。
开集的闭包:是指该开集与其所有边界点的集合并集,本身是一个闭集。
正则集:由内部点构成的点集的闭包就是正则集,三维空间的正则集就是正则形体。
组成三维物体的点的集合可以分为两类:
内点为点集中的这样一些点,它们具有完全包含于该点集的充分小的领域。
边界点:不具备此性质的点集中的点。
二维流形指的是对于实体表面上的任意一点,都可以找到一个围绕着它的任意小的领域,该领域与平面上的一个圆盘是拓扑等价的。
实体:对于一个占据有限空间的正则形体,如果其表面是二维流形,则该正则形体为实体。
基本概念——正则集合运算
有效实体的封闭性。
把能够产生正则形体的集合运算称为正则集合运算。
基本概念——平面多面体与欧拉公式
欧拉公式证明简单多面体的顶点数V、边数E和面数F满足如下关系:V-E+F=2。
非简单多面体需对欧拉公式加以扩展。令H表示多面体表面上孔的个数,G表示贯穿多面体的孔的个数,C表示独立的、不相连接的多面体数,则扩展后的欧拉公式为:V-E+F-H=2(C-G)。
4.2 三维形体的表示
线框模型与实体模型(实体造型技术)
可以将实体模型的表示大致分为三类:
边界表示(Boundary representation, B-reps)
构造实体几何表示
空间分割(Space-partitioning)表示
多边形表面模型:
边界表示(B-reps)的最普遍方式是多边形表面模型,它使用一组包围物体内部的平面多边形,也即平面多面体,来描述实体。
多边形表面模型——数据结构
几何信息:
建立3张表:顶点表、边表和多边形表来存储几何数据。
实体模型中,用多边形顶点坐标值以及多边形所在平面方程方式保存实体单个表面部分的空间方向信息
拓扑信息:翼边结构表示(Winged Edges Structure)
属性信息:用属性表来存储多边形面的属性,指明物体透明度及表面反射度的参数和纹理特征等等。
多边形网格:三维形体的边界通常用多边形网格(polygon mesh)的拼接来模拟。
扫描表示:
扫描表示法(sweep representation)可以利用简单的运动规则生成有效实体。
包含两个要素
一是作扫描运动的基本图形(截面);
二是扫描运动的方式。
构造实体几何法
构造实体几何法(CSG,Constructive Solid Geometry)由两个实体间的并、交或差操作生成新的实体。
在构造实体几何法中,集合运算的实现过程可以用一棵二叉树(称为CSG树)来描述。
树的叶子是基本体素或是几何变换参数;
树的非终端结点是施加于其子结点的正则集合算子(正则并、正则交和正则差)或几何变换的定义。
优点:如果体素设置比较齐全,通过集合运算就可以构造出多种不同的符合需要的实体。
缺点一:集合运算的中间结果难以用简单的代数方程表示,求交困难。
缺点二:CSG树不能显式地表示形体的边界,因而无法直接显示CSG树表示的形体。
解决:光线投射算法
空间位置枚举表示
空间位置枚举表示法将包含实体的空间分割为大小相同、形状规则(正方形或立方体)的体素,然后,以体素的集合来表示图形对象。
二维情况,常用二维数组存放。
三维情况下,常用三维数组p[i][j][k]来存放。
八叉树
八叉树(octrees)又称为分层树结构,它对空间进行自适应划分,采用具有层次结构的八叉树来表示实体。
BSP树
二叉空间分割(Binary Space Partitioning,BSP)树方法是一种类似于八叉树的空间分割方法,它每次将一实体用任一位置和任一方向的平面分为二部分(不同于八叉树方法的每次将实体用平行于笛卡尔坐标平面的三个两两垂直的平面分割)。
OpenGL中的实体模型函数