2.1 几何建模
借助 OpenGL 可以绘制很多复杂、有趣的图形,但这些图形都是由几种基本
图元组成。而这些几何图元又都是用起顶点描述的:顶点坐标定义点本身、线段
的端点或多边形的角点。[21]
在 OpenGL 中,点、直线、多边形的含义与数学意义
上的点、直线、多边形有所区别。造成差别的原因主要是:一、计算机计算能力
上的局限性。计算机在处理浮点计算时,精度总是有限的。二、光栅图形显示器
的局限性。在显示器中,最小的单位是像素,这与数学中的无限小的点显然是不
一致的。在 OpenGL 中,术语直线指的是线段,而不是数学意义上的沿着两个方
向延伸到无穷远的直线。术语多边形指的是由一系列闭合线段环绕的区域,这些
线段由其端点处的顶点指定。绘制多边形时,通常填充其内部的像素。
3.1.1指定顶点
在 OpenGL 中,所有几何体最终都被描述为一个有序的顶点集合。要指定顶
点,可使用函数glVertex*()。函数的具体形式为:
Void glVertex{234}{sifd}[v](TYPE coords);
其中{}内表示选择参数,2、3、4代表描述顶点的坐标的文数,s、i、f、d代表数据类型,[]内表示可选参数,v 表示参数选用向量形式描述。此外,对于
glVertex的调用只能在glBegin 和glEnd之间进行。
3.1.2几何绘图图元
为了创建一系列的点、直线、多边形,需要在glBegin()和glEnd()之间指定
每组顶点。传递给 glBegin()的参数决定了根据这些顶点创建哪种几何图元。
OpenGL支持的几何图元如下表1所示:
表1 几何图元名称及意义
GL_POINTS 独立的点
GL_LINES 将每对顶点视为一条线段
GL_LINE_STRIP 一系列相连的线段
GL_LINE_LOOP 同上,同时在第一个和最后一个顶点间绘制线段
GLTRIANGLES 将每 3个顶点视为一个三角形
GL_TRAINGLE_STRIP 三角形条带
GL_ TRAINGLE_FAN 三角形扇
GL_QUADS 将每 4个顶点视为一个四边形
GLQUADS_STRIP 四边形条带
GL_POLYGON 简单的凸多边形
2.1.3法线向量
法线向量是垂直于表面的向量。在平面中,所有点的垂直方向相同,但在曲
面中,各个点的发现方向可能不同。在 OpenGL 中,可以指定每个多边形或者顶
点的法线。在同一多边形中,不同顶点的法线方向可能相同,也可能不同。此外,
不能再顶点以为的地方指定法线,否则会出现意想不到的结果。
物体的法线向量定义了其表面的朝向,具体说,是相对于光源的朝向。正确
设置法线对于渲染光线至关重要。要设置法线,可先使用函数 glNormal*(),这
样,接下来调用glVertex*()时,当前法线将被赋给指定的顶点。 综述所述,利用 OpenGL 中的基本图元以及 GLu、Glut 库中的高级绘制函数
可以实现对许多物体的几何建模。此外,在利用 OpenGL 几何建模时,需要注意
以下几点:
a) 确保多边形的方向(旋向)一致。确保从外面观察时,表面上所有多
边形的方向都相同(一般选择逆时针)。这一点对于渲染光照至关重要。
如果错误,会带来难以预料的错误。
b) 为实现高质量的图像,对图像实现细分建模是一个很好的选择。
c) 创建闭合曲面时,务必在闭合环的开始与结束处使用完全一致的坐标,
否则数值的舍入会导致缝隙和裂纹。
d) 几何建模过程中,需要区别好世界坐标系和窗口坐标系。 基于OpenGL光照模型的有效辐射计算(5):http://www.youerw.com/jisuanji/lunwen_8462.html