转: OpenGL API 简介
开发基于 OpenGL 的应用程序,必须先了解 OpenGL 的库函数。它采用 C 语言风格,提供
大量的函数来进行图形的处理和显示。OpenGL 库函数的命名方式非常有规律。所有
OpenGL 函数采用了以下格式:
<库前缀><根命令><可选的参数个数><可选的参数类型>
库前缀有 gl、glu、aux、glut、wgl、glx、agl 等等,分别表示该函数属于 OpenGL 那
个开发库,从函数名后面中还可以看出需要多少个参数以及参数的类型。I 代表 int 型,f 代
表 float 型,d 代表 double 型,u 代表无符号整型。例如 glVertex3fv()表示了该函数属于 gl
库,参数是三个 float 型参数指针。我们用 glVertex*()
来表示这一类函数。
OpenGL 函数库相关的 API 有核心库(gl)、实用库(glu)、辅助库(aux)、实用工具库(glut)、
窗口库(glx、agl、wgl)和扩展函数库等。从图可以看出,gl 是核心,glu 是对 gl 的部分封装。
glx、agl、wgl 是针对不同窗口系统的函数。glut 是为跨平台的 OpenGL 程序的工具包,比
aux 功能强大。扩展函数库是硬件厂商为实现硬件更新利用 OpenGL 的扩展机制开发的函
数。下面逐一对这些库进行详细介绍。
1.OpenGL 核心库
核心库包含有 115 个函数,函数名的前缀为 gl。这部分函数用于常规的、核心的图形
处理。此函数由 gl.dll 来负责解释执行。由于许多函数可以接收不同数以下几类。据类型的
参数,因此派生出来的函数原形多达 300 多个。核心库中的函数主要可以分为以下几类函
数:
绘制基本几何图元的函数:glBegain()、glEnd()、glNormal*()、glVertex*();
矩阵操作、几何变换和投影变换的函数:如矩阵入栈函数 glPushMatrix(),矩阵出
栈函数 glPopMatrix(),装载矩阵函数 glLoadMatrix(),矩阵相乘函数 glMultMatrix(),当前
矩阵函数 glMatrixMode()和矩阵标准化函数 glLoadIdentity(),几何变换函数 glTranslate*()、
glRotate*()和 glScale*(),投影变换函数 glOrtho()、glFrustum()和视口变换函数 glViewport();
颜色、光照和材质的函数:如设置颜色模式函数 glColor*()、glIndex*(),设置光照
效果的函数 glLight*() 、glLightModel*()和设置材质效果函数 glMaterial();
显示列表函数:主要有创建、结束、生成、删除和调用显示列表的函数 glNewList()、
glEndList()、glGenLists()、glCallList()和 glDeleteLists();
纹理映射函数:主要有一维纹理函数 glTexImage1D()、二维纹理函数
glTexImage2D()、设置纹理参数、纹理环境和纹理坐标的函数 glTexParameter*()、
glTexEnv*()和 glTetCoord*();
特殊效果函数:融合函数 glBlendFunc()、反走样函数 glHint()和雾化效果 glFog*();
光栅化、象素操作函数:如象素位置 glRasterPos*()、线型宽度 glLineWidth()、多
边形绘制模式 glPolygonMode(),读取象素 glReadPixel()、复制象素 glCopyPixel();
选择与反馈函数:主要有渲染模式 glRenderMode()、选择缓冲区 glSelectBuffer()
和反馈缓冲区 glFeedbackBuffer();
曲线与曲面的绘制函数:生成曲线或曲面的函数 glMap*()、glMapGrid*(),求值器
的函数 glEvalCoord*() glEvalMesh*();
状态设置与查询函数:glGet*()、glEnable()、glGetError()。
2.OpenGL 实用库 The OpenGL Utility Library (GLU)
包含有 43 个函数,函数名的前缀为 glu。OpenGL 提供了强大的但是为数不多的绘图
命令,所有较复杂的绘图都必须从点、线、面开始。Glu 为了减轻繁重的编程工作,封装
了 OpenGL 函数,Glu 函数通过调用核心库的函数,为开发者提供相对简单的用法,实现