begain begin begain区别
OpenGL建模
OpenGL作为三维图形的函数库,为开发者提供了丰富的绘图工具和函数。这一章节主要将介绍OpenGL中基本图元的概念和操作,包括点、线、多边形等,这些图元是构建复杂模型的基础。
7.1 图元描述
在OpenGL中,图元是构成三维场景的基本元素。这些图元与数学定义略有不同,因为受到计算机浮点计算限制和位图显示限制的影响。
7.1.1 浮点计算与图元定义
由于OpenGL中所有浮点计算存在精度限制,因此定义的点、线、多边形等图元坐标值会存在一定的误差。这种误差是在计算机图形处理中常见的现象。
7.1.2 位图显示与图元显示单位
在位图显示方式中,最小的显示单位是像素。尽管每个像素的宽度非常小,但在数学上定义的点和线的宽度与实际显示的像素宽度相比要大得多。在使用OpenGL进行计算时,尽管使用一系列浮点值定义了点串,但每个点实际上是以单个像素的形式显示,这只是一个近似拟合的过程。
OpenGL图元是抽象的几何概念,并非真实世界中的物体,因此需要使用相关的数学模型进行描述。
7.2 齐次坐标系统
在OpenGL中,空间直角坐标系中的任意一点可以使用一个三维坐标矩阵表示。当使用四维坐标矩阵(齐次坐标)来表示时,可以更灵活地处理几何变换和计算。齐次坐标中的最后一维坐标被称为比例因子。
在处理二维和三维坐标点时,OpenGL都采用齐次坐标系统进行统一处理。每个齐次点由一个向量表示,向量的四个元素均不为零。齐次点具有以下性质:
1. 当实数a非零时,(x, y, z, w)和(ax, ay, az, aw)表示同一个点。
2. 三维空间点的齐次点坐标形式为(x, y, z, 1.0),而二维平面点的齐次坐标形式为(x, y, 0.0, 1.0)。
3. 当w不为零时,齐次点坐标(x, y, z, w)对应三维空间点的实际坐标为(x/w, y/w, z/w);当w为零时,该齐次点表示一个位于某方向的无穷远点的位置。
7.3 点、线和多边形的绘制
在OpenGL中,绘制图元的基础是定义和操作顶点。所有几何物体最终都是由有一定顺序的顶点集来描述的。
7.3.1 点(Point)的绘制
用浮点值表示的点被称为顶点。所有这些顶点在OpenGL内部计算时都作为三维点来处理。即使是用二维坐标定义的点(x, y),在OpenGL中也默认其z值为0。这些顶点坐标使用齐次坐标(x, y, z, w)来表示,当w不为0时,它们表示三维空间中的实际位置。
7.3.2 线(Line)的绘制
在OpenGL中,线代表线段而非无限延伸的线。这里的线由一系列顶点顺序连接而成,可以是闭合的或非闭合的。
7.3.3 多边形(Polygon)的绘制
OpenGL中定义的多边形是由一系列线段顺序连接而成的封闭区域。这些线段不能交叉,区域内不能有空洞,且多边形必须是凸多边形才能被OpenGL函数接受。多边形可以是平面多边形或空间多边形。
7.4 构造几何图元
在OpenGL中,所有被定义的顶点必须放在glBegin()和glEnd()两个函数之间才能正确表达一个几何图元或物体。这两个函数之间的区域包含了构造几何图元所需的顶点数据和其他相关信息。
在构造几何图元时,可以使用多种方法,这些方法仅依赖于所给的顶点数据和OpenGL提供的函数。还可以为每个顶点设置颜色、法线、纹理坐标等其他属性,这需要通过调用相关的函数来实现。
7.5 实例与练习