OpenGL
函数库相关的API有核心库(gl)、实用库(glu)、辅助库(aux)、实用工具库(glut)、窗口库(glx、agl、wgl)和扩展函数库等。
从图1可以看出,gl是核心,glu是对gl的部分封装。glx、agl、wgl
是针对不同窗口系统的函数。glut是为跨平台的OpenGL程序的工具包,比aux功能强大。扩展函数库是硬件厂商为实现硬件更新利用OpenGL的扩
展机制开发的函数。下面逐一对这些库进行详细介绍。
矩
阵操作、几何变换和投影变换的函数。如矩阵入栈函数glPushMatrix()、矩阵出栈
函数glPopMatrix()、装载矩阵函数glLoadMatrix()、矩阵相乘函数glMultMatrix(),当前矩阵函数
glMatrixMode()和矩阵标准化函数glLoadIdentity(),几何变换函数glTranslate*()、glRotate*()和
glScale*(),投影变换函数glOrtho()、glFrustum()和视口变换函数glViewport()等等。
非
均匀有理B样条绘制工具,主要用来定义和绘制Nurbs曲线和曲面,包括gluNewNurbsRenderer()、gluNurbsCurve()、
gluBeginSurface()、gluEndSurface()、gluBeginCurve()、gluNurbsProperty()等函数。
三 维物体绘制函数。包括了两种形式网状体和实心体,如绘制立方体auxWireCube()和
auxSolidCube()。这里以网状体为例,长方体auxWireBox()、环形圆纹面auxWireTorus()、圆柱
auxWireCylinder()、二十面体auxWireIcosahedron()、八面体auxWireOctahedron()、四面体
auxWireTetrahedron()、十二面体auxWireDodecahedron()、圆锥体auxWireCone()和茶壶
auxWireTeapot()。
glut 是不依赖于窗口平台的OpenGL工具包,由Mark
KLilgrad在SGI编写(现在在Nvidia),目的是隐藏不同窗口平台API的复杂度。
函数以glut开头,它们作为aux库功能更强的替代品,提供更为复杂的绘制功能,此函数由glut.dll来负责解释执行。由于glut中的窗口管理函
数是不依赖于运行环境的,因此OpenGL中的工具库可以在X-Window, Windows NT,
OS/2等系统下运行,特别适合于开发不需要复杂界面的OpenGL示例程序。对于有经验的程序员来说,一般先用glut理顺3D图形代码,然后再集成为
完整的应用程序。
随
着硬件的更新,硬件厂商首先向SGI申请登记新的扩展,编写规格说明书(specification)。然后按照说明书进行开发扩展程序。不同的
OpenGL实现(OpenGL
Implementation)支持的扩展可能不一样,只有随着某一扩展的推广与应用以及硬件技术的提高该扩展才会在所有的OpenGL实现中被给予支
持,从而最终成为OpenGL标准库的一部分。扩展由SGI维护,在SGI网站上列出了目前公开的已注册的扩展及其官方说明书。