阅读:1289回复:0
OpenGL系列讲座(5)
第四章 OpenGL建模
OpenGL基本库提供了大量绘制各种类型图元的方法,辅助库也提供了不少描述复杂三维 图形的函数。这一章主要介绍基本图元,如点、线、多边形,有了这些图元,就可以建立比 较复杂的模型了。 4.1 描述图元 OpenGL是三维图形的函数库,它所定义的点、线、多边形等图元与一般的定义不太一样, 存在一定的差别。对编程者来说,能否理解二者之间的差别十分重要。一种差别源于基于计 算机计算的限制。OpenGL中所有浮点计算精度有限,故点、线 、多边形的坐标值存在一定 的误差。另一种差别源于位图显示的限制。以这种方式显示图形,最小的显示图元是一个象 素,尽管每个象素宽度很小,但它们仍然比数学上所定义的点或线宽要大得多。当用OpenGL 进行计算时,虽然是用一系列浮点值定义点串,但每个点仍然是用单个象素显示,只是近似 拟合。 OpenGL图元是抽象的几何概念,不是真实世界中的物体,因此须用相关的数学模型来描 述。 4.1.1 齐次坐标(Homogeneous Coordinate) 在空间直角坐标系中,任意一点可用一个三维坐标矩阵[x y z]表示。如果将该点用一个 四维坐标的矩阵[Hx Hy Hz H]表示时,则称为齐次坐标表示方法。在齐次坐标中,最后一维 坐标H称为比例因子。 在OpenGL中,二维坐标点全看作三维坐标点,所有的点都用齐次坐标来描述,统一作为 三维齐次点来处理。每个齐次点用一个向量(x,y,z,w)表示,其中四个元素全不为零。齐次点 具有下列几个性质: 1.如果实数a非零,则(x,y,x,w)和(ax,ay,az,aw)表示同一个点,类似于x/y=(ax)/( ay)。 2.三维空间点(x,y,z)的齐次点坐标为(x,y,z,1.0),二维平面点(x,y)的齐次坐标为 (x,y,0.0,1.0)。 3.当w不为零时,齐次点坐标(x,y,z,w)即三维空间点坐标(x/w,y/w,z/w);当w为零时, 齐次点(x,y,z,0.0)表示此点位于某方向的无穷远处。 注意,OpenGL中指定w大于或等于0.0。 4.1.2 点(Point) 用浮点值表示的点称为顶点(Vertex)。所有顶点在OpenGL内部计算时都作为三维点处 理,用二维坐标(x,y)定义的点在OpenGL中默认z值为0。所有顶点坐标用齐次坐标(x,y,z,w) 表示,如果w不为0.0,这些齐次坐标表示的顶点即为三维空间点(x/w,y/w,z/w)。编程者可 以自己指定w值,但很少这样做。一般来说,w缺省为1.0。 4.1.3 线(Line) 在OpenGL中,线代表线段(Line Segment),不是数学意义上的那种沿轴两个方向无限延 伸的线。这里的线由一系列顶点顺次连结而成,有闭合和不闭合两种。见图2-4-1所示。 闭 合 不闭合 图2-4-1 线段的两种连结方式 4.1.4 多边形(Polygon) OpenGL中定义的多边形是由一系列线段依次连结而成的封闭区域。这些线段不能交叉, 区域内不能有空洞,多边形必须在凸多边形,否则不能被OpenGL函数接受。合法和非法多边 形图示见图2-4-2。 合 法 非 法 图2-4-2 合法和非法多边形 OpenGL多边形可以是平面多边形,即所有顶点在一个平面上,也可以是空间多边形。更 复杂的多边形将在提高篇中介绍。 |
|
|