OpenGL库函数大全_第1页
OpenGL库函数大全_第2页
OpenGL库函数大全_第3页
OpenGL库函数大全_第4页
OpenGL库函数大全_第5页
已阅读5页,还剩22页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、1.OpenGL核心库核心库包含有115个函数,函数名的前缀为gl。这部分函数用于常规的、核心的图形处理。此函数由gl.dll来负责解释执行。由于许多函数可以接收不同数以下几类。据类型的参数,因此派生出来的函数原形多达300多个。核心库中的函数主要可以分为以下几类函数:(1绘制基本几何图元的函数。如绘制图元的函数glBegain(、glEnd(、glNormal*(、glV ertex*(。(2矩阵操作、几何变换和投影变换的函数。如矩阵入栈函数glPushMatrix(、矩阵出栈函数glPopMatrix(、装载矩阵函数glLoadMatrix(、矩阵相乘函数glMultMatrix(,当前矩

2、阵函数glMatrixMode(和矩阵标准化函数glLoadIdentity(,几何变换函数glTranslate*(、glRotate*(和glScale*(,投影变换函数glOrtho(、glFrustum(和视口变换函数glViewport(等等。(3颜色、光照和材质的函数。如设置颜色模式函数glColor*(、glIndex*(,设置光照效果的函数glLight*( 、glLightModel*(和设置材质效果函数glMaterial(等等。(4显示列表函数、主要有创建、结束、生成、删除和调用显示列表的函数glNewList(、glEndList(、glGenLists(、glCall

3、List(和glDeleteLists(。(5纹理映射函数,主要有一维纹理函数glTexImage1D(、二维纹理函数glTexImage2D(、设置纹理参数、纹理环境和纹理坐标的函数glTexParameter*(、glTexEnv*(和glTetCoord*(等。(6特殊效果函数。融合函数glBlendFunc(、反走样函数glHint(和雾化效果glFog*(。(7光栅化、象素操作函数。如象素位置glRasterPos*(、线型宽度glLineWidth(、多边形绘制模式glPolygonMode(,读取象素glReadPixel(、复制象素glCopyPixel(等。(8选择与反馈函数

4、。主要有渲染模式glRenderMode(、选择缓冲区glSelectBuffer(和反馈缓冲区glFeedbackBuffer(等。(9曲线与曲面的绘制函数。生成曲线或曲面的函数glMap*(、glMapGrid*(,求值器的函数glEvalCoord*( glEvalMesh*(。(10状态设置与查询函数。主要有glGet*(、glEnable(、glGetError(等。2.OpenGL实用库The OpenGL Utility Library (GLU包含有43个函数,函数名的前缀为glu。OpenGL提供了强大的但是为数不多的绘图命令,所有较复杂的绘图都必须从点。线、面开始。Glu

5、为了减轻繁重的编程工作,封装了OpenGL函数,Glu函数通过调用核心库的函数,为开发者提供相对简单的用法,实现一些较为复杂的操作。此函数由glu.dll来负责解释执行。OpenGL中的核心库和实用库可以在所有的OpenGL平台上运行。主要包括了以下几种:(1辅助纹理贴图函数,有gluScaleImage( 、gluBuild1Dmipmaps(、gluBuild2Dmipmaps(。(2坐标转换和投影变换函数,定义投影方式函数gluPerspective(、gluOrtho2D( 、gluLookAt(,拾取投影视景体函数gluPickMatrix(,投影矩阵计算gluProject(和gl

6、uUnProject(等等。(3多边形镶嵌工具,有gluNewTess(、gluDeleteTess(、gluTessCallback(、gluBeginPolygon( gluTessV ertex(、gluNextContour(、gluEndPolygon(等等。(4二次曲面绘制工具,主要有绘制球面、锥面、柱面、圆环面gluNewQuadric(、gluSphere(、gluCylinder(、gluDisk(、gluPartialDisk(、gluDeleteQuadric(等等。(5非均匀有理B样条绘制工具,主要用来定义和绘制Nurbs曲线和曲面,包括gluNewNurbsRende

7、rer(、gluNurbsCurve(、gluBeginSurface(、gluEndSurface(、gluBeginCurve(、gluNurbsProperty(等函数。(6错误反馈工具,获取出错信息的字符串gluErrorString(。3.OpenGL辅助库包含有31个函数,函数名前缀为aux。这部分函数提供窗口管理、输入输出处理以及绘制一些简单三维物体。此函数由glaux.dll来负责解释执行。创建aux库是为了学习和编写OpenGL程序,它更像是一个用于测试创意的预备基础接管。Aux库在windows实现有很多错误,因此很容易导致频繁的崩溃。在跨平台的编程实例和演示中,aux很大

8、程度上已经被glut库取代。OpenGL中的辅助库不能在所有的OpenGL平台上运行。辅助库函数主要包括以下几类:(1窗口初始化和退出函数,auxInitDisplayMode(和auxInitPosition(。(2窗口处理和时间输入函数,auxReshapeFunc(、auxKeyFunc(和auxMouseFunc(。(3颜色索引装入函数,auxSetOneColor(。(4三维物体绘制函数。包括了两种形式网状体和实心体,如绘制立方体auxWireCube(和auxSolidCube(。这里以网状体为例,长方体auxWireBox(、环形圆纹面auxWireTorus(、圆柱auxWir

9、eCylinder(、二十面体auxWireIcosahedron(、八面体auxWireOctahedron(、四面体auxWireTetrahedron(、十二面体auxWireDodecahedron(、圆锥体auxWireCone(和茶壶auxWireTeapot(。(5背景过程管理函数auxIdleFunc(。(6程序运行函数auxMainLoop(。4.OpenGL工具库OpenGL Utility Toolkit包含大约30多个函数,函数名前缀为glut。glut是不依赖于窗口平台的OpenGL工具包,由Mark KLilgrad在SGI编写(现在在Nvidia,目的是隐藏不同窗

10、口平台API的复杂度。函数以glut开头,它们作为aux库功能更强的替代品,提供更为复杂的绘制功能,此函数由glut.dll来负责解释执行。由于glut中的窗口管理函数是不依赖于运行环境的,因此OpenGL中的工具库可以在X-Window, Windows NT, OS/2等系统下运行,特别适合于开发不需要复杂界面的OpenGL示例程序。对于有经验的程序员来说,一般先用glut理顺3D图形代码,然后再集成为完整的应用程序。这部分函数主要包括:(1窗口操作函数,窗口初始化、窗口大小、窗口位置等函数glutInit( glutInitDisplayMode( glutInitWindowSize(

11、 glutInitWindowPosition(等。(2回调函数。响应刷新消息、键盘消息、鼠标消息、定时器函数等,GlutDisplayFunc( glutPostRedisplay( glutReshapeFunc( glutTimerFunc( glutKeyboardFunc( glutMouseFunc(。(3创建复杂的三维物体。这些和aux库的函数功能相同。创建网状体和实心体。如glutSolidSphere(、glutWireSphere(等。在此不再叙述。(4菜单函数。创建添加菜单的函数GlutCreateMenu(、glutSetMenu(、glutAddMenuEntry(、

12、glutAddSubMenu( 和glutAttachMenu(。(5程序运行函数,glutMainLoop(。(一库函数开发基于OpenGL的应用程序,必须先了解OpenGL的库函数。它采用C语言风格,提供大量的函数来进行图形的处理和显示。OpenGL图形库一共有100多个函数,它们分别属于OpenGL的基本库、实用库、辅助库等不同的库。1、核心库,包含的函数有115个,它们是最基本的函数,其前缀是gl;这部分函数用于常规的、核心的图形处理,由gl.dll来负责解释执行。核心库中的函数可以进一步分为以下几类函数。(1绘制基本几何图元的函数。glBegain(、glEnd(、glNormal*

13、(、glV ertex*(。(2矩阵操作、几何变换和投影变换的函数。矩阵入栈函数glPushMatrix(,矩阵出栈函数glPopMatrix(,装载矩阵函数glLoadMatrix(,矩阵相乘函数glMultMatrix(,当前矩阵函数glMatrixMode(和矩阵标准化函数glLoadIdentity(,几何变换函数glTranslate*(、glRotate*(和glScale*(,投影变换函数glOrtho(、glFrustum(和视口变换函数glV iewport(等等。(3颜色、光照和材质的函数。如设置颜色模式函数glColor*(、glIndex*(,设置光照效果的函数glLi

14、ght*( 、glLightModel*(和设置材质效果函数glMaterial(等等。(4显示列表函数。主要有创建、结束、生成、删除和调用显示列表的函数glNewList(、glEndList(、glGenLists(、glCallList(和glDeleteLists(等。(5纹理映射函数。主要有一维纹理函数glTexImage1D(、二维纹理函数glTexImage2D(、设置纹理参数、纹理环境和纹理坐标的函数glTexParameter*(、glTexEnv*(和glTetCoord*(等。(6特殊效果函数。融合函数glBlendFunc(、反走样函数glHint(和雾化效果glFog

15、*(。(7光栅化、象素操作函数。像素位置glRasterPos*(、线型宽度glLineWidth(、多边形绘制模式glPolygonMode(,读取象素glReadPixel(、复制象素glCopyPixel(等。(8选择与反馈函数。主要有渲染模式glRenderMode(、选择缓冲区glSelectBuffer(和反馈缓冲区glFeedbackBuffer(等。(9曲线与曲面的绘制函数。生成曲线或曲面的函数glMap*(、glMapGrid*(,求值器的函数glEvalCoord*( glEvalMesh*(。(10状态设置与查询函数。主要有glGet*(、glEnable(、glGetE

16、rror(等。2、实用库(OpenGL utility library,GLU,包含的函数功能更高一些,如绘制复杂的曲线曲面、高级坐标变换、多边形分割等,共有43个,前缀为glu。Glu函数通过调用核心库的函数,为开发者提供相对简单的用法,实现一些较为复杂的操作。此类函数由glu.dll 来负责解释执行。主要包括了以下几种:(1辅助纹理贴图函数。有gluScaleImage( 、gluBuild1Dmipmaps(、gluBuild2Dmipmaps(等。(2坐标转换和投影变换函数。定义投影方式函数gluPerspective(、gluOrtho2D( 、gluLookAt(,拾取投影视景体函

17、数gluPickMatrix(,投影矩阵计算gluProject(和gluUnProject(等。(3多边形镶嵌工具。有gluNewTess(、gluDeleteTess(、gluTessCallback(、gluBeginPolygon( gluTessV ertex(、gluNextContour(、gluEndPolygon(等。(4二次曲面绘制工具。主要有绘制球面、锥面、柱面、圆环面gluNewQuadric(、gluSphere(、gluCylinder(、gluDisk(、gluPartialDisk(、gluDeleteQuadric(等等。(5非均匀有理B样条绘制工具。主要用来

18、定义和绘制Nurbs曲线和曲面,包括gluNewNurbsRenderer(、gluNurbsCurve(、gluBeginSurface(、gluEndSurface(、gluBeginCurve(、gluNurbsProperty(等函数。(6错误反馈工具。获取出错信息的字符串gluErrorString(等。3、OpenGL辅助库(OpenGL auxiliarylibrary,GLAUX,包括简单的窗口管理、输入事件处理、某些复杂三维物体绘制等函数,共有31个,前缀为aux。此类函数由glaux.dll 来负责解释执行。辅助库函数主要包括以下几类。(1窗口初始化和退出函数。auxIni

19、tDisplayMode(和auxInitPosition(。(2窗口处理和时间输入函数。auxReshapeFunc(、auxKeyFunc(和auxMouseFunc(。(3颜色索引装入函数。auxSetOneColor(。(4三维物体绘制函数。包括了两种形式网状体和实心体,如绘制立方体auxWireCube(和auxSolidCube(。这里以网状体为例,长方体auxWireBox(、环形圆纹面auxWireTorus(、圆柱auxWireCylinder(、二十面体auxWireIcosahedron(、八面体auxWireOctahedron(、四面体auxWireTetrahedr

20、on(、十二面体auxWireDodecahedron(、圆锥体auxWireCone(和茶壶auxWireTeapot(。绘制实心体只要将上述函数中的确"Wire"更换成"Solid"就可以了。(5其他。背景过程管理函数auxIdleFunc(;程序运行函数auxMainLoop(。4、OpenGL工具库(penGL Utility Toolkit包含大约30多个函数,函数名前缀为glut,此函数由glut.dll来负责解释执行。这部分函数主要包括:(1窗口操作函数窗口初始化、窗口大小、窗口位置等函数glutInit( glutInitDisplayM

21、ode(、glutInitWindowSize( glutInitWindowPosition(等。(2回调函数。响应刷新消息、键盘消息、鼠标消息、定时器函数等,GlutDisplayFunc(、glutPostRedisplay(、glutReshapeFunc(、glutTimerFunc(、glutKeyboardFunc(、glutMouseFunc(。(3创建复杂的三维物体。这些和aux库的函数功能相同。创建网状体和实心体。如glutSolidSphere(、glutWireSphere(等。(4菜单函数创建添加菜单的函数GlutCreateMenu(、glutSetMenu(、gl

22、utAddMenuEntry(、glutAddSubMenu( 和glutAttachMenu(。(5程序运行函数。glutMainLoop(。5、16个WGL函数,专门用于OpenGL和Windows窗口系统的联接,其前缀为wgl,主要用于创建和选择图形操作描述表(renderingcontexts以及在窗口内任一位置显示字符位图。这类函数主要包括以下几类(1绘图上下文相关函数。wglCreateContext(、wglDeleteContext(、wglGetCurrentContent(、wglGetCurrentDC( wglDeleteContent(等。(2文字和文本处理函数。wg

23、lUseFontBitmaps(、wglUseFontOutlines(。(3覆盖层、地层和主平面层处理函数。wglCopyContext(、wglCreateLayerPlane(、wglDescribeLayerPlane(、wglReakizeLayerPlatte(等。(4其他函数。wglShareLists(、wglGetProcAddress(等。6、另外,还有五个Win32函数用来处理像素格式(pixel formats和双缓存。由于它们是对Win32系统的扩展,因此不能应用在其它OpenGL平台上。(二OpenGL数据类型与C语言相对应,OpenGL中也有整数、字节、浮点数等数

24、据类型,为了说明两者的对应关系,下表将OpenGL的数据类型与相应的C类型进行了对比:前缀数据类型相应C语言类型OpenGL类型b 8-bit integer signed char GLbytes 16-bit integer short GLshorti 32-bit integer long GLint,GLsizeif 32-bit floating-point float GLfloat,GLclampfd 64-bit floating-point double GLdouble,GLclampdub 8-bit unsigned integer unsigned char GLu

25、byte,GLbooleanus 16-bit unsigned integer unsigned short GLushortui 32-bit unsigned integer unsigned long GLuint,GLenum,GLbitfield表一、OpenGL数据类型表此外,OpenGL也定义GLvoid类型,如果用C语言编写,可以用它替代void类型。(三OpenGL库函数的命名规律了解了OpenGL的数据类型,让我们再回过头来看看OpenGL库函数的命名规律。所有OpenGL函数采用了以下格式:<库前缀><根命令><可选的参数个数><

26、;可选的参数类型>库前缀有gl、glu、aux、glut、wgl、glx等等,分别表示该函数属于OpenGL某开发库等,从函数名后面中还可以看出需要多少个参数以及参数的类型。I代表int型,f代表float 型,d代表double型,u代表无符号整型。注意,有的函数参数类型后缀前带有数字2、3、4。2代表二维,3代表三维,4代表alpha值(以后介绍。有些OpenGL函数最后带一个字母v,表示函数参数可用一个指针指向一个向量(或数组来替代一系列单个参数值。下面两种格式都表示设置当前颜色为红色,二者等价。glColor3f(1.0,0.0,0.0;等价于:float color_array

27、=1.0,0.0,0.0;glColor3fv(color_array;除了以上基本命名方式外,还有一种带"*"星号的表示方法,例如glColor*(,它表示可以用函数的各种方式来设置当前颜色。同理,glV ertex*v(表示用一个指针指向所有类型的向量来定义一系列顶点坐标值。第一篇GL库函数第一章使用颜色l. l glshadeModel-选择平面明暗模式或光滑明暗模式1. 2 glColor-设置当前颜色1. 3 glColorPointer-定义颜色数组1. 4 gllndex-设置当前颜色索引1. 5 gllndexPointer-定义颜色索引数组1. 6 glC

28、OforTableEXT-为目标调色板纹理指定调色板的格式和大小1. 7 glColorsubTableEXT-指定需要替代的目标纹理调色板的一部分第二章绘制几何图原及物体2. l glVertex-指定顶点2. 2 glVertexPointer-定义顶点数据数组2. 3 glArrayElement-指定用来绘制顶点的数组元素2. 4 glBegin, glEnd-限定一个或多个图原顶点的绘制2. 5 glEdgeFlag, glEdgeFlagy-指定边界标记2. 6 glPointsize-指定光栅化点的直径2. 7 glLinewidth-指定光栅化直线的宽度2. 8 glLines

29、tipple-指定点划线2. 9 glPolygonMode-选择多边形光栅化模式2. 10 glFrontFace-定义正面多边形和反反面多边形2. 11 glPolygonstipple-设置多边形点划图2. 12 glDrawElements-从数组数据绘制图原2. 13 glRect-绘制矩形第三章坐标转换3. l glTranslate-用平移矩阵乘以当前矩阵3. 2 glRotate-用旋转矩阵乘以当前矩阵3. 3 glscale-用缩放矩阵乘以当前矩阵3. 4 glViewport-设置机口3. 5 glFrustum-用透视矩阵乘以当前矩阵3. 6 glorthO-用正视矩阵乘

30、以当前矩阵3. 7 glClipPlane-指定切割几何物体的平面第四章堆栈操作4. l glLoadMatrix-用任意矩阵替换当前矩阵4. 2 glMultMatrix-用任意矩阵乘以当前矩阵4. 3 glMatrixMode-指定哪一个矩阵是当前矩阵4. 4 glPushMatrix, glPopMatrix-压人和弹出当前矩阵堆栈4. 5 glPushAttrib, glPopAttrib-压人和弹出属性堆栈4. 6 glPushClientAttrib, glPopClientAttrib-在客户属性堆栈中保存和恢复客户状态变量组4. 7 glPushName, gPopName-压

31、人和弹出名称堆栈4. 8 gllnitNames-初始名称堆栈4, 9 glLoadName-向名称堆栈中装载名称第五章显示列表5. l glNewList, glEndList-创建或替换一个显示列表5. 2 glCallLISt-执行一个显示列表5. 3 glCallLISts-执行一列显示列表5. 4 glGenLists-生成一组空的相邻的显示列表5. 5 glDeleteLists-删除一组相邻的显示列表5. 6 gllSLISt-检验显示列表的存在第六章使用光照和材质6. l glNormal-设置当前的法向量6. 2 glNormalPointer-定义法向量数组6. 3 glL

32、ight-设置光源参数6. 4 glLightModel-设置光照模型参数6. 5 glMaterial-为光照模型指定材质参数6. 6 glColorMateria-使材质颜色跟踪当前颜色第七章像素操作7. l glRasterPos-为像素操作指定光栅位置7. 2 glBitmap-绘制位图7. 3 glReadPixels-从帧缓存中读取一块像素7. 4 glDrawPixels-将一个像素块写人帧缓存7. 5 glCopyPixels-在帧缓存中拷贝像素7. 6 glCopyTexlmage1D-将像素从帧缓存拷贝到一维纹理图像中7. 7 glCopyTexlmageZD-把像素从帧缓

33、存拷贝到二维纹理图像中7. 8 glCopyTexsublmagelD-从帧缓存中拷贝一维纹理图像的子图像7. 9 glCopyTexsublmageZD-从帧缓存中拷贝二维纹理图像的子图像7. 10 glPixelZoom-指定像素缩放因子7. 11 glPixelstore-设置像素存储模式7. 12 glPixelTransfer-设置像素传输模式7. 13 glPixelMap-设置像素传输映射表第八章纹理映射8. l glTexlmagelD-指定一维纹理图像8. 2 glTexlmageZD-指定二维纹理映像8. 3 glTexParameter-设置纹理参数8. 4 glTexs

34、ublmage1D-指定已存在的一维纹理图像的一部分8. 5 glTexsublmageZD-指定已存在的二维纹理图像的一部分8. 6 glTexEnv-设置纹理环境参数8. 7 glTexCoord-设置当前纹理坐标8. 8 glTexGen-控制纹理坐标的生成8. 9 glTexCoordPointer-定义纹理坐标数组8. 10 glDeleteTextures-删除命名的纹理第九章特殊效果操作9. l glBlendFunc-指定像素的数学算法9. 2 glHint-指定由实现确定的控制行为9. 3 glFOg-指定雾化参数第十章帧缓存操作10. l glClear-将缓存清除为预先的

35、设置值10. 2 glClearAccum-设置累加缓存的清除值10. 3 glClearCo lor-设置颜色缓存的清除值10. 4 glClearDepth-设置深度缓存的清除值10. 5 glClearlndex-设置颜色索引缓存的清除值10. 6 glClearstencil-设置模板缓存的清除值10. 7 glDrawBuffer-指定绘制的颜色缓存10. 8 gllndexMask-控制颜色索引缓存中单个位的写操作10. 9 glColorMask-激活或关闭帧缓存颜色分量的写操作10. 10 glDepthMask-激活或关闭对深度缓存的写操作10. 11 glstencilMa

36、sk-控制模板平面中单个位的写操作10. 12 glAlphaFunc-一指定alpha检验函数10. 13 glstencilFunc-设置模板检验函数和参考值10. 14 glstencilop-设置模板检验操作10. 15 glDepthFunc-指定深度比较中使用的数值10. 16 glDepthRange-指定从单位化的设备坐标到窗口坐标的z值映射10. 17 glLOgiCOp-为颜色索引绘制指定逻辑像素操作10. 18 glACCum-对累加缓存进行操作第十一章绘制曲线和曲面11. l glEvalCoord-求取激活的一维和二维纹理图11. 2 glMapl-定义一维求值器11

37、. 3 glMapZ-定义二维求值器11. 4 glMapGrid-定义一维或二维网格11. 5 glEvalMesh-计算一维或二维点网格或线网格11. 6 glEvalPoint-生成并求取网格中的单个点第十二章查询函数12. l glGet-返回所选择的参数值12. 2 glGetClipPlane-返回指定的切平面系数12. 3 glGetColorTableEXT-获得当前目标纹理调色板的颜色表数据12. 4 glGetColorTableParameterfvEXT, glGetColorTableParameterlvEXT-从颜色表中获得调色板参数12. 5 glGetErro

38、r-返回错误信息12. 6 glGetLight-返回光源参数值12. 7 glGetMap-返回求值器参数12. 8 glGetMaterial-返回材质参数12. 9 glGetPixelMap-返回指定的像素映像12. 10 glGetPointery-返回顶点数据数组地J12. 11 glGetPolygonstipple-返回多边形点戈12. 12 glGetstring-返回描述当前OpenGL12. 13 glGetTexEnv-返回纹理环境参数12. 14 glGetTexGen-返回纹理坐标生成参数12. 15 glGetTexlmage-返回纹理图像12. 16 glGet

39、TexLevelParameter-返回指定细节水平的纹理参数值12. 17 glGetTexParameter-返回纹理参数值基于VC+的OpenGL编程讲座之概述时间:2008-12-17 17:29:02来源:网络作者:未知点击:700次前言随着计算机多媒体技术、可视化技术及图形学技术的发展,我们可以使用计算机来精确地再现现实世界中的绚丽多彩的三维物体,并充分发挥自身的创造性思维,通过人机交互来模拟、改造现实世界,这就是目前最为时髦的虚拟现实技术。通过这种技术,建筑工程师可以直接设计出美观的楼房模型;军事指挥员可以模拟战场进行军事推演,网民可以足不出户游览故宫博物馆等名胜古迹等。而虚拟现

40、实技术最重要的一部分内容就是三维图形编程。当前,三维图形编程工具中最为突出的是SGI公司的OpenGL(Open Graphics Language,开放式的图形语言,它已经成为一个工业标准的计算机三维图形软件开发接口,并广泛应用于游戏开发、建筑、产品设计、医学、地球科学、流体力学等领域。值得一提的是,虽然微软有自己的三维编程开发工具DirectX,但它也提供OpenGL图形标准,因此,OpenGL可以在微机中广泛应用。目前,OpenGL在国内外都掀起了热潮,但国内对这一领域介绍的资料并不是很多,特别是有志于在图形图像方面进行深入研究的读者朋友,常常苦于不掌握OpenGL编程接口技术,无法向纵

41、深领域扩展。为了开启三维图形编程这扇神秘大门,本讲座在结合OpenGL 有关理论知识的基础上,着重介绍Visual C+6.0开发环境中的编程实现,由于水平有限,本讲座可能无法面面俱到,存在一些疏漏,但相信它可以将开启"神秘大门"的钥匙交给读者朋友们。一、OpenGL的特点及功能OpenGL是用于开发简捷的交互式二维和三维图形应用程序的最佳环境,任何高性能的图形应用程序,从3D动画、CAD辅助设计到可视化访真,都可以利用OpenGL高质量、高性能的特点。OpenGL自1992年出现以来,逐渐发展完善,已成为一个唯一开放的,独立于应用平台的图形标准,一个典型的OpenGL应用

42、程序可以在任何平台上运行-只需要使用目标系统的OpenGL库重新编译一下。OpenGL非常接近硬件,是一个图形与硬件的接口,包括了100多个图形函数用来建立三维模型和进行三维实时交互。OpenGL强有力的图形函数不要求开发人员把三维物体模型的数据写成固定的数据格式,也不要求开发人员编写矩阵变换、外部设备访问等函数,大大地简化了编写三维图形的程序。例如:1 OpenGL提供一系列的三维图形单元(图元供开发者调用。2 OpenGL提供一系列的图形变换函数。3 OpenGL提供一系列的外部设备访问函数,使开发者可以方便地访问鼠标、键盘、空间球、数据手套等外部设备。由于微软在Windows中包含了Op

43、enGL,所以OpenGL可以与V isual C+紧密接合,简单快捷地实现有关计算和图形算法,并保证算法的正确性和可靠性。简单地说,OpenGL具有建模、变换、色彩处理、光线处理、纹理影射、图像处理、动画及物体运动模糊等功能:1、建模OpenGL图形库除了提供基本的点、线、多边形的绘制函数外,还提供了复杂的三维物体,如球、锥、多面体、茶壶以及复杂曲线和曲面(例如Bezier、Nurbs等曲线或曲面的绘制函数。2、变换OpenGL图形库的变换包括基本变换和投影变换。基本变换有平移、旋转、变比、镜像四种变换,投影变换有平行投影(又称正射投影和透视投影两种变换。3、颜色模式设置OpenGL颜色模式

44、有两种,即RGBA模式和颜色索引(Color Index。4、光照和材质设置OpenGL光有辐射光(Emitted Light、环境光(Ambient Light、漫反射光(Diffuse Light和镜面光(Specular Light。材质是用光反射率来表示。客观世界中的物体最终反映到人眼的颜色是光的红绿蓝分量与材质红绿蓝分量的反射率相乘后形成的颜色。5、纹理映射(Texture Mapping利用OpenGL纹理映射功能可以十分逼真地表达物体表面细节。6、位图显示和图象增强OpenGL的图象功能除了基本的拷贝和像素读写外,还提供融合(Blending、反走样(Antialiasing和雾

45、(fog的特殊图象效果处理。以上三条可是被仿真物更具真实感,增强图形显示的效果。7、双缓存动画(Double BufferingOpenGL使用了前台缓存和后台缓存交替显示场景(Scene技术,简而言之,后台缓存计算场景、生成画面,前台缓存显示后台缓存已画好的画面。8、特殊效果利用OpenGL还能实现深度暗示(Depth Cue、运动模糊(Motion Blur等特殊效果。运动模糊的绘图方式(motion-blured,模拟物体运动时人眼观察所感觉的动感现象。深度域效果(depth-of-effects,类似于照相机镜头效果,模型在聚焦点处清晰,反之则模糊。这些三维物体绘图和特殊效果处理方式,

46、说明OpenGL能够模拟比较复杂的三维物体或自然景观。二、OpenGL工作流程OpenGL的基本工作流程如下图:图一、OpenGL工作流程如上图所示,几何顶点数据包括模型的顶点集、线集、多边形集,这些数据经过流程图的上部,包括运算器、逐个顶点操作等;图像数据包括象素集、影像集、位图集等,图像象素数据的处理方式与几何顶点数据的处理方式是不同的,但它们都经过光栅化、逐个片元(Fragment处理直至把最后的光栅数据写入帧缓冲器。在OpenGL中的所有数据包括几何顶点数据和象素数据都可以被存储在显示列表中或者立即可以得到处理。OpenGL中,显示列表技术是一项重要的技术。OpenGL要求把所有的几何

47、图形单元都用顶点来描述,这样运算器和逐个顶点计算操作都可以针对每个顶点进行计算和操作,然后进行光栅化形成图形碎片;对于象素数据,象素操作结果被存储在纹理组装用的内存中,再象几何顶点操作一样光栅化形成图形片元。整个流程操作的最后,图形片元都要进行一系列的逐个片元操作,这样最后的象素值送入帧缓冲器实现图形的显示。根据这个流程,我们可以归纳出在OpenGL中进行主要的图形操作直至在计算机屏幕上渲染绘制出三维图形景观的基本步骤:1根据基本图形单元建立景物模型,并且对所建立的模型进行数学描述(OpenGL中把:点、线、多边形、图像和位图都作为基本图形单元。2把景物模型放在三维空间中的合适的位置,并且设置

48、视点(viewpoint以观察所感兴趣的景观。3计算模型中所有物体的色彩,其中的色彩根据应用要求来确定,同时确定光照条件、纹理粘贴方式等。4把景物模型的数学描述及其色彩信息转换至计算机屏幕上的象素,这个过程也就是光栅化(rasterization。在这些步骤的执行过程中,OpenGL可能执行其他的一些操作,例如自动消隐处理等。另外,景物光栅化之后被送入帧缓冲器之前还可以根据需要对像素数据进行操作。三、Windows 中OpenGL库函数及数据类型(一库函数开发基于OpenGL的应用程序,必须先了解OpenGL的库函数。它采用C语言风格,提供大量的函数来进行图形的处理和显示。OpenGL图形库一

49、共有100多个函数,它们分别属于OpenGL的基本库、实用库、辅助库等不同的库。1、核心库,包含的函数有115个,它们是最基本的函数,其前缀是gl;这部分函数用于常规的、核心的图形处理,由gl.dll来负责解释执行。核心库中的函数可以进一步分为以下几类函数。(1绘制基本几何图元的函数。glBegain(、glEnd(、glNormal*(、glV ertex*(。(2矩阵操作、几何变换和投影变换的函数。矩阵入栈函数glPushMatrix(,矩阵出栈函数glPopMatrix(,装载矩阵函数glLoadMatrix(,矩阵相乘函数glMultMatrix(,当前矩阵函数glMatrixMode

50、(和矩阵标准化函数glLoadIdentity(,几何变换函数glTranslate*(、glRotate*(和glScale*(,投影变换函数glOrtho(、glFrustum(和视口变换函数glV iewport(等等。(3颜色、光照和材质的函数。如设置颜色模式函数glColor*(、glIndex*(,设置光照效果的函数glLight*( 、glLightModel*(和设置材质效果函数glMaterial(等等。(4显示列表函数。主要有创建、结束、生成、删除和调用显示列表的函数glNewList(、glEndList(、glGenLists(、glCallList(和glDelete

51、Lists(等。(5纹理映射函数。主要有一维纹理函数glTexImage1D(、二维纹理函数glTexImage2D(、设置纹理参数、纹理环境和纹理坐标的函数glTexParameter*(、glTexEnv*(和glTetCoord*(等。(6特殊效果函数。融合函数glBlendFunc(、反走样函数glHint(和雾化效果glFog*(。(7光栅化、象素操作函数。像素位置glRasterPos*(、线型宽度glLineWidth(、多边形绘制模式glPolygonMode(,读取象素glReadPixel(、复制象素glCopyPixel(等。(8选择与反馈函数。主要有渲染模式glRend

52、erMode(、选择缓冲区glSelectBuffer(和反馈缓冲区glFeedbackBuffer(等。(9曲线与曲面的绘制函数。生成曲线或曲面的函数glMap*(、glMapGrid*(,求值器的函数glEvalCoord*( glEvalMesh*(。(10状态设置与查询函数。主要有glGet*(、glEnable(、glGetError(等。2、实用库(OpenGL utility library,GLU,包含的函数功能更高一些,如绘制复杂的曲线曲面、高级坐标变换、多边形分割等,共有43个,前缀为glu。Glu函数通过调用核心库的函数,为开发者提供相对简单的用法,实现一些较为复杂的操作

53、。此类函数由glu.dll 来负责解释执行。主要包括了以下几种:(1辅助纹理贴图函数。有gluScaleImage( 、gluBuild1Dmipmaps(、gluBuild2Dmipmaps(等。(2坐标转换和投影变换函数。定义投影方式函数gluPerspective(、gluOrtho2D( 、gluLookAt(,拾取投影视景体函数gluPickMatrix(,投影矩阵计算gluProject(和gluUnProject(等。(3多边形镶嵌工具。有gluNewTess(、gluDeleteTess(、gluTessCallback(、gluBeginPolygon( gluTessV e

54、rtex(、gluNextContour(、gluEndPolygon(等。(4)二次曲面绘制工具。 主要有绘制球面、锥面、柱面、圆环面 gluNewQuadric(、gluSphere(、gluCylinder(、 gluDisk(、gluPartialDisk(、gluDeleteQuadric(等等。 (5)非均匀有理 B 样条绘制工具。 主要用来定义和绘制 Nurbs 曲线和曲面, 包括 gluNewNurbsRenderer(、 gluNurbsCurve(、 gluBeginSurface(、gluEndSurface(、gluBeginCurve(、gluNurbsPropert

55、y(等函数。 (6)错误反馈工具。 获取出错信息的字符串 gluErrorString(等。 3、OpenGL 辅助库(OpenGL auxiliarylibrary,GLAUX) ,包括简单的窗口管理、输入 事件处理、某些复杂三维物体绘制等函数,共有 31 个,前缀为 aux。此类函数由 glaux.dll 来负责解释执行。辅助库函数主要包括以下几类。 (1)窗口初始化和退出函数。 auxInitDisplayMode(和 auxInitPosition(。 (2)窗口处理和时间输入函数。 auxReshapeFunc(、auxKeyFunc(和 auxMouseFunc(。 (3)颜色索引

56、装入函数。 auxSetOneColor(。 (4)三维物体绘制函数。 包括了两种形式网状体和实心体,如绘制立方体 auxWireCube(和 auxSolidCube(。这 里以网状体为例, 长方体 auxWireBox(、 环形圆纹面 auxWireTorus(、 圆柱 auxWireCylinder(、 二十面体 auxWireIcosahedron(、八面体 auxWireOctahedron(、四面体 auxWireTetrahedron(、 十二面体 auxWireDodecahedron(、圆锥体 auxWireCone(和茶壶 auxWireTeapot(。绘制实心 体只要将上

57、述函数中的确"Wire"更换成"Solid"就可以了。 (5)其他。 背景过程管理函数 auxIdleFunc(;程序运行函数 auxMainLoop(。 4、OpenGL 工具库(penGL Utility Toolkit) 包含大约 30 多个函数,函数名前缀为 glut,此函数由 glut.dll 来负责解释执行。这部分 函数主要包括: (1)窗口操作函数 窗 口 初 始 化 、 窗 口 大 小 、 窗 口 位 置 等 函 数 glutInit( glutInitDisplayMode( 、 glutInitWindowSize( glutInitWindowPosition(等。 (2)回调函数。 响 应 刷 新 消 息 、 键 盘 消 息 、 鼠 标 消 息 、 定 时 器 函 数 等 , GlutDisplayFunc( 、 glutPostRedisplay( 、 glutReshapeFunc( 、 glutTimerFunc( 、 glutKeyboardFunc( 、 glutMouseFunc(。 (3)创建复

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论