hyde
路人甲
路人甲
  • 注册日期2003-09-24
  • 发帖数555
  • QQ
  • 铜币1457枚
  • 威望0点
  • 贡献值0点
  • 银元0个
阅读:1198回复:0

OpenGL系列讲座(5)

楼主#
更多 发布于:2004-03-20 10:31
第四章 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多边形可以是平面多边形,即所有顶点在一个平面上,也可以是空间多边形。更

复杂的多边形将在提高篇中介绍。

 

 

喜欢0 评分0
夜落了,风静了,我喜欢一本书,一杯茶,一粒摇曳的烛光...
游客

返回顶部