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 函数通过调用核心库的函数,为开发者提供相对简单的用法,实现一些较为复杂的操作。此函数由 glu.dll 来负责解释执行。OpenGL 中的核心库和实用库可以在所有的 OpenGL 平台上运行。主要包括了以下几种:

辅助纹理贴图函数:

gluScaleImage()、gluBuild1Dmipmaps()、gluBuild2Dmipmaps()。

坐标转换和投影变换函数:

定义投影方式函数gluPerspective()、gluOrtho2D()、gluLookAt(),拾取投影视景体函数gluPickMatrix(),投影矩阵计算gluProject()和gluUnProject()。

多边形镶嵌工具:

gluNewTess()、gluDeleteTess()、gluTessCallback()、gluBeginPolygon()、gluTessVertex()、gluNextContour()、gluEndPolygon()。

二次曲面绘制工具:

主要有绘制球面、锥面、柱面、圆环面gluNewQuadric()、gluSphere()、gluCylinder()、gluDisk()、gluPartialDisk()、gluDeleteQuadric()。

非均匀有理 B 样条绘制工具:

主要用来定义和绘制 Nurbs 曲线和曲面,包括gluNewNurbsRenderer()、gluNurbsCurve()、gluBeginSurface()、gluEndSurface()、gluBeginCurve()、gluNurbsProperty()。

错误反馈工具:

获取出错信息的字符串gluErrorString()。

3.OpenGL 辅助库

包含有 31 个函数,函数名前缀为 aux。这部分函数提供窗口管理、输入输出处理以及绘制一些简单三维物体。此函数由 glaux.dll 来负责解释执行。创建 aux库是为了学习和编写 OpenGL 程序,它更像是一个用于测试创意的预备基础接管。Aux 库在 windows 实现有很多错误,因此很容易导致频繁的崩溃。在跨平台的编程实例和演示中,aux 很大程度上已经被 glut 库取代。OpenGL 中的辅助库不能在所有的 OpenGL 平台上运行。

辅助库函数主要包括以下几类:

窗口初始化和退出函数:

auxInitDisplayMode()、 auxInitPosition()。

窗口处理和时间输入函数:

auxReshapeFunc()、auxKeyFunc()、auxMouseFunc()。

颜色索引装入函数:

auxSetOneColor()。

三维物体绘制函数:

包括了两种形式网状体和实心体,如绘制立方体auxWireCube()、auxSolidCube()。这里以网状体为例,长方体auxWireBox()、环形圆纹面auxWireTorus()、圆柱`auxWireCylinder()、二十面体auxWireIcosahedron()、八面体auxWireOctahedron()、四面体auxWireTetrahedron()、十二面体auxWireDodecahedron()、圆锥体auxWireCone()和茶壶auxWireTeapot()。

背景过程管理函数:

auxIdleFunc()。

程序运行函数:

auxMainLoop()。

4.OpenGL 工具库 OpenGL Utility Toolkit

包含大约 30 多个函数,函数名前缀为 glut。glut 是不依赖于窗口平台的OpenGL 工具包,由 Mark KLilgrad 在 SGI 编写(现在在 Nvidia),目的是隐藏不同窗口平台 API 的复杂度。 函数以 glut 开头,它们作为 aux 库功能更强的替代品,提供更为复杂的绘制功能,此函数由 glut.dll 来负责解释执行。由于 glut中的窗口管理函数是不依赖于运行环境的,因此 OpenGL 中的工具库可以在 XWindow,Windows NT, OS/2 等系统下运行,特别适合于开发不需要复杂界面的 OpenGL 示例程序。对于有经验的程序员来说,一般先用 glut 理顺 3D 图形代码,然后再集成为完整的应用程序。

这部分函数主要包括:

窗口操作函数:

窗口初始化、窗口大小、窗口位置函数等

glutInit()、glutInitDisplayMode()、glutInitWindowSize()、glutInitWindowPosition()。

回调函数:

响应刷新消息、键盘消息、鼠标消息、定时器函数

GlutDisplayFunc()、glutPostRedisplay()、glutReshapeFunc()、glutTimerFunc()、glutKeyboardFunc()、glutMouseFunc()。

创建复杂的三维物体:

这些和 aux 库的函数功能相同

菜单函数:

创建添加菜单的函数

GlutCreateMenu()、glutSetMenu()、glutAddMenuEntry()、glutAddSubMenu()、glutAttachMenu()。

程序运行函数:

glutMainLoop()。

5.Windows 专用库

针对 windows 平台的扩展,包含有 16 个函数,函数名前缀为 wgl。这部分函数主要用于连接 OpenGL 和 Windows ,以弥补 OpenGL 在文本方面的不足。Windows 专用库只能用于 Windows 环境中。

这类函数主要包括以下几类:

绘图上下文相关函数:

wglCreateContext()、wglDeleteContext()、wglGetCurrentContent()、wglGetCurrentDC()、wglDeleteContent()。

文字和文本处理函数:

wglUseFontBitmaps()、wglUseFontOutlines()。

覆盖层、地层和主平面层处理函数:

wglCopyContext()、wglCreateLayerPlane()、wglDescribeLayerPlane()、wglReakizeLayerPlatte()。

其他函数:

wglShareLists()、wglGetProcAddress()。

6.Win32 API 函数库

包含有 6 个函数,函数名无专用前缀,是 win32 扩展函数。这部分函数主要用于处理像素存储格式和双帧缓存;这 6 个函数将替换 Windows GDI 中原有的同样的函数。Win32API 函数库只能用于 Windows 95/98/NT 环境中。

7.X 窗口专用库

是针对 Unix 和 Linux 的扩展函数。包括渲染上下文、绘制图元、显示列表、纹

理贴图等;

初始化:

glXQueryExtension()。

渲染上下文函数:

glXCreateContext()、glXDestroyContext()、glXCopyContext()、glXMakeCurrent()、glXCreateGLXPixmap()。

执行:

glXWaitGL()、glXWaitX()。

缓冲区和字体:

glXSwapBuffers()、glXUseXFont()。

8.其他扩展库

这些函数可能是新的 OpenGL 函数,并没有在标准 OpenGL 库中实现,或者它们是用来扩展已存在的 OpenGL 函数的功能。和 glu、glx 和 wgl 一样,这些OpenGL 扩展是由硬件厂商和厂商组织开发的。OpenGL 扩展(OpenGLExtention)包含了大量的扩展 API 函数。

随着硬件的更新,硬件厂商首先向 SGI 申请登记新的扩展,编写规格说明书(specification)。然后按照说明书进行开发扩展程序。不同的 OpenGL 实现(OpenGL Implementation)支持的扩展可能不一样,只有随着某一扩展的推广与应用以及硬件技术的提高该扩展才会在所有的 OpenGL 实现中被给予支持,从而最终成为 OpenGL 标准库的一部分。扩展由 SGI 维护,在 SGI 网站上列出了目前公开的已注册的扩展及其官方说明书。扩展源由扩展函数的后缀来指明(或使用扩展常量后缀)。例如,后缀 WIN 表明一个符合 Windows 规范的扩展,EXT或 ARB 后缀表明该扩展由多个卖主定义。

下面给出 OpenGL 官方规定的命名规则:

• ARB – OpenGL Architecture Review Board 正式核准的扩展,往往由厂商开发的扩展发展而来,如果同时存在厂商开发的扩展和 ARB 扩展,应该优先使用 ARB 扩展;

• EXT – 多家 OpenGL 厂商同意支持的扩展;

• HP – Hewlett-Packard 惠普;

• IBM – International Business Machines ;

• KTX – Kinetix, maker of 3D Studio Max ;

• INTEL – Intel 公司;

• NV – NVIDIA 公司;

• MESA – Brian Paul’s freeware portable OpenGL implementation ;

• SGI – Silicon Graphics 公司开发的扩展;

• SGIX – Silicon Graphics (experimental) 公司开发的实验性扩展;

• SUN – Sun Microsystems;

• WIN – Microsoft 。

由于 OpenGL 扩展在针对不同平台和不同驱动,OpenGL 不可能把所有的接口程序全部放到 gl.h、glx.h、wgl.h 中,而是将这些函数头放在了glext.h、glxext.h 和 wglext.h 中。这些扩展被看作时 OpenGL 核心库规范的增加和修改。

9.OpenGl 核心函数库

glAccum操作累加缓冲区

glAddSwapHintRectWIN定义一组被 SwapBuffers 拷贝的三角形

glAlphaFunc允许设置 alpha 检测功能

glAreTexturesResident决定特定的纹理对象是否常驻在纹理内存中

glArrayElement定义一个被用于顶点渲染的数组成分

glBegin、glEnd定义一个或一组原始的顶点

glBindTexture允许建立一个绑定到目标纹理的有名称的纹理

glBitmap绘制一个位图

glBlendFunc特殊的像素算法

glCallList执行一个显示列表

glCallLists执行一列显示列表

glClear用当前值清除缓冲区

GlClearAccum为累加缓冲区指定用于清除的值

glClearColor为色彩缓冲区指定用于清除的值

glClearDepth为深度缓冲区指定用于清除的值

glClearStencil为模板缓冲区指定用于清除的值

glClipPlane定义被裁剪的一个平面几何体

glColor设置当前色彩

glColorMask允许或不允许写色彩组件帧缓冲区

glColorMaterial使一个材质色彩指向当前的色彩

glColorPointer定义一列色彩

glColorTableEXT定义目的一个调色板纹理的调色板的格式和尺寸

glColorSubTableEXT定义目的纹理的调色板的一部分被替换

glCopyPixels拷贝帧缓冲区里的像素

glCopyTexImage1D将像素从帧缓冲区拷贝到一个单空间纹理图象中

glCopyTexImage2D将像素从帧缓冲区拷贝到一个双空间纹理图象中

glCopyTexSubImage1D从帧缓冲区拷贝一个单空间纹理的子图象

glCopyTexSubImage2D从帧缓冲区拷贝一个双空间纹理的子图象

glCullFace定义前面或后面是否能被精选

glDeleteLists删除相邻一组显示列表

glDeleteTextures删除命名的纹理

glDepthFunc定义用于深度缓冲区对照的数据

glDepthMask允许或不允许写入深度缓冲区

glDepthRange定义 z 值从标准的设备坐标映射到窗口坐标

glDrawArrays定义渲染多个图元

glDrawBuffer定义选择哪个色彩缓冲区被绘制

glDrawElements渲染数组数据中的图元

glDrawPixels将一组像素写入帧缓冲区

glEdgeFlag定义一个边缘标志数组

glEdgeFlagPointer定义一个边缘标志数组

glEnable、glDisable打开或关闭 OpenGL 的特殊功能

glEnableClientState、glDisableClientState分别打开或关闭数组

glEvalCoord求解一维和二维贴图

glEvalMesh1、glEvalMesh2求解一维和二维点或线的网格

glEvalPoint1、glEvalPoint2生成及求解一个网格中的单点

glFeedbackBuffer控制反馈模式

glFinish等待直到 OpenGL 执行结束

glFlush在有限的时间里强制 OpenGL 的执行

glFogf、glFogi、glFogfv、glFogiv定义雾参数

glFrontFace定义多边形的前面和背面

glFrustum当前矩阵乘上透视矩阵

glGenLists生成一组空的连续的显示列表

glGenTextures生成纹理名称

glGetBooleanv、glGetDoublev、glGetFloatv、glGetIntegerv返回值或所选参数值

glGetClipPlane返回特定裁减面的系数

glGetColorTableEXT从当前目标纹理调色板得到颜色表数据

glGetColorTableParameterfvEXT、glGetColorTableParameterivEXT从颜色表中得到调色板参数

glGetError返回错误消息

glGetLightfv、glGetLightiv返回光源参数值

glGetMapdv、glGetMapfv、glGetMapiv返回求值程序参数

glGetMaterialfv、glGetMaterialiv返回材质参数

glGetPixelMapfv、glGetpixelMapuiv、glGetpixelMapusv返回特定的像素图

glGetPointerv返回顶点数据数组的地址

glGetPolygonStipple返回多边形的点图案

glGetString返回描述当前 OpenGl 连接的字符串

glGetTexEnvfv返回纹理环境参数

glGetTexGendv、glGetTexGenfv、glGetTexGeniv返回纹理坐标生成参数

glGetTexImage返回一个纹理图象

glGetTexLevelParameterfv、glGetTexLevelParameteriv返回特定的纹理参数的细节级别

glGetTexParameterfv、glGetTexParameteriv返回纹理参数值

glHint定义实现特殊的线索

glIndex建立当前的色彩索引

glIndexMask控制写色彩索引缓冲区里的单独位

GlIndexPointer定义一个颜色索引数组

glInitName初始化名字堆栈

glInterleavedArrays同时定义和允许几个在一个大的数组集合里的交替数组

glIsEnabled定义性能是否被允许

glIsList检测显示列表的存在

glIsTexture确定一个名字对应一个纹理

glLightf、glLighti、glLightfv、glLightiv设置光源参数

glLightModelf、glLightModeli、glLightModelfv、glLightModeliv设置光线模型参数

glLineStipple设定线点绘图案

glLineWidth设定光栅线段的宽

glListBase为 glcallList 设定显示列表的基础

glLoadIdentity用恒等矩阵替换当前矩阵

glLoadMatrixd,glLoadMatrif用一个任意矩阵替换当前矩阵

glLoadName将一个名字调入名字堆栈

glLogicOp为色彩索引渲染定义一个逻辑像素操作

glMap1d,glMap1f定义一个一维求值程序

glMap2d,glMap2f定义一个二维求值程序

glMapGrid1d,glMapGrid1f,glMapgrid2d,glMapGrid2f定义一个一维或二维网格

glMaterialf,glMateriali,glMateriafv,glMaterialiv为光照模型定义材质参数

glMatrixMode定义哪一个矩阵是当前矩阵

glMultMatrixd,glMultMatrixf用当前矩阵与任意矩阵相乘

glNewList,glEndList创建或替换一个显示列表

glNormal设定当前顶点法向

glNormalPointer设定一个法向数组

glOrtho用垂直矩阵与当前矩阵相乘

glPassThrough在反馈缓冲区做记号

glPixelMapfv,glPixelMapuiv,glPixelMapusv设定像素交换图

glPixelStoref,glpixelStorei设定像素存储模式

glPixelTransferf,glPixelTransferi设定像素存储模式

glPixelZoom设定像素缩放因数

glPointSize设定光栅点的直径

glPolygonMode选择一个多边形的光栅模式

glPolygonOffset设定 OpenGL 用于计算深度值的比例和单元

glPolygonStipple设定多边形填充图案

glPrioritizeTextures设定纹理固定的优先级

glPushAttrib,glPopAttrib属性堆栈的压入和弹出操作

glPushClientAttrib,glPopClientAttrib在客户属性堆栈存储和恢复客户状态值

glPushmatrix,glPopMatrix矩阵堆栈的压入和弹出操作

glPushName,glPopName名字堆栈的压入和弹出操作

glRasterPos定义像素操作的光栅位置

glreadBuffer为像素选择一个源色彩缓冲区

glReadPixels从帧缓冲区读取一组数据

glRectd,glRectf,glRecti,glRects,glRectdv,glRectfv,glRectiv,glRectsv绘制一个三角形

glRenderMode定义光栅模式

glRotated,glRotatef将旋转矩阵与当前矩阵相乘

glScaled,glScalef将一般的比例矩阵与当前矩阵相乘

glScissor定义裁减框

glSelectBuffer为选择模式值建立一个缓冲区

glShadeModel选择平直或平滑着色

glStencilFunc为模板测试设置功能和参照值

glStencilMask控制在模板面写单独的位

glStencilOp设置激活模式测试

glTexCoord设置当前纹理坐标

glTexCoordPointer定义一个纹理坐标数组

glTexEnvf,glTexEnvi,glTexEnvfv,glTexEnviv设定纹理坐标环境参数

glTexGend,glTexgenf,glTexGendv,glTexGenfv,glTexGeniv控制纹理坐标的生成

glTexImage1D定义一个一维的纹理图象

glTexImage2D定义一个二维的纹理图

glTexParameterf,glTexParameteri,glTexParameterfv,glTexParameteriv设置纹理参数

glTexSubImage1D定义一个存在的一维纹理图像的一部分,但不能定义新的纹理

glTexSubImage2D定义一个存在的二维纹理图像的一部分,但不能定义新的纹理

glTranslated,glTranslatef将变换矩阵与当前矩阵相乘

glVertex定义一个顶点

glVertexPointer设定一个顶点数据数组

glViewport设置视窗

10 . OpenGL 应用函数库

gluBeginCurve,gluEndCurve定义一条不一至的有理的 NURBS 曲线

gluBeginPolygon,gluEndPolygon定义一个非凸多边形

gluBeginSurface,gluEndSurface定义一个 NURBS 曲线

gluBeginTrim,gluEndTrim定义一个 NURBS 整理循环

gluBuild1Dmipmaps建立一维多重映射

gluBuild2Dmipmaps建立二维多重映射

gluCylinder绘制一个圆柱

gluDeleteNurbsRenderer删除一个 NURBS 对象

gluDeleQuadric删除一个二次曲面对象

gluDeleteTess删除一个镶嵌对象

gluDisk绘制一个盘子

gluErrorString根据 OpenGL 或 GLU 错误代码产生错误字符串

gluGetNutbsProperty得到一个 NURBS 属性

gluGetString得到一个描述 GLU 版本号或支持 GLU 扩展调用的字符串

gluGetTessProperty得到一个镶嵌对象

gluLoadSamplingMatrices加载 NUMRBS 例子和精选矩阵

gluLookAt设定一个变换视点

gluNewNurbsRenderer创建一个 NURBS 对象

gluNewQuadric建立一个二次曲面对象

gluNewTess建立一个镶嵌对象

gluNextContour为其他轮廓的开始做标记

gluNurbsCallback为 NURBS 对象设定一个回调

gluNnrbsCurve设定一个 NuRBS 曲线的形状

gluNurbsProperty设定一个 NURBS 属性

gluNurbsSurface定义一个 NURBS 表面的形状

gluOrtho2D定义一个二位正交投影矩阵

gluPartialDisk绘制一个盘子的弧

gluPerspective设置一个透视投影矩阵

gluPickMatrix定义一个拾取区间

gluProject将对象坐标映射为窗口坐标

gluPwlCurve描述一个分段线性 NURBS 修剪曲线

gluQuadricCallback为二次曲面对象定义一个回调

gluQuadricDrawStyle为二次曲面设定合适的绘制风格

gluQuadricNormals定义二次曲面所用的法向的种类

gluQuadricOrientation定义二次曲面内部或外部方向

gluQuadricTexture定义是否带二次其面做纹理帖图

gluScaleImage将图象变换为任意尺寸

gluSphere绘制一个球体

gluTessBeginContour,gluTessEndContour划定一个边界描述

gluTessBeginPolygon,gluTessEndPolygon划定一个多边形描述

gluTessCallback为镶嵌对象定义一个回调

gluTessNormal为一个多边行形定义法向

gluTessProperty设置镶嵌对象的属性

gluTessVertex定义在一个多边形上的顶点

gluUnProject将窗口坐标映射为对象坐标

文/difcareer(作者)

原文链接:http://www.jianshu.com/p/8d30ae82c4dd

著作权归作者所有,转载请联系作者获得授权,并标注“作者”。

你可能感兴趣的:(OpenGL API)