`

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中的工具库可以在X-Window, 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扩展(OpenGL Extention)包含了大量的扩展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核心库规范的增加和修改。
分享到:
评论

相关推荐

    OpenGL常用API函数解释

    以下是一些常见的OpenGL API函数及其作用的详细解释: 1. **glAccum**: 这个函数用于操作累加缓冲区,累加缓冲区是一个特殊的缓冲区,可以进行光照计算和其他高级图形效果。 2. **glAlphaFunc**: 允许设置alpha...

    OpenGL ES常用API

    OpenGL ES 常用 API OpenGL ES 是一个基于 OpenGL 的嵌入式系统 Three-Dimensional图形API,用于在移动设备和嵌入式系统上实现三维图形渲染。下面是 OpenGL ES 的一些常用 API。 1. 设置背景颜色:glClearColor ...

    OpenGL-API.rar_opengl API

    OpenGL常用API介绍,是图形开发者的使用手册

    OpenGL 常用API

    以下是一些OpenGL常用API的详细说明: 1. **glClear()**: 这个函数用于清除颜色缓冲区、深度缓冲区或模板缓冲区。在开始新的帧渲染之前,通常会调用glClear()来初始化屏幕。 2. **glBegin() 和 glEnd()**: 这...

    OpenGL蓝宝书,红宝书及源代码,常用API

    学习OpenGL不可错过的好资料: 1.OpenGL编程指南(原书第7版)中文_红宝书及源码 2.OpenGL超级宝典.(第4版)_蓝宝书 3.OpenGL常用API说明 4.opengl库文件

    OpenGL常用函数自己整理滴

    ### OpenGL常用函数详解 #### 一、色彩与透明度设置 **函数名:** `glClearColor` **功能:** 设置清除颜色缓冲时的颜色值。这四个参数分别对应红、绿、蓝、透明度分量。 **语法:** ```c void glClearColor...

    opengl编程实现旋转

    总结来说,实现OpenGL编程中的旋转涉及理解3D空间、顶点、图元、矩阵变换以及OpenGL的API调用。通过C++和相关的图形库,我们可以创建动态的3D场景,如这个旋转的“HI”字,从而为用户带来丰富的视觉体验。在实际开发...

    OPENGL常用库(全).zip

    这个名为"OPENGL常用库(全).zip"的压缩包提供了几个关键的库,帮助开发者在OpenGL环境中实现更复杂的图形功能。下面将详细介绍这些库以及它们在计算机图形学中的作用。 1. **GLEW (GL Extension Wrangler Library...

    OpenGL 全部常用库

    OpenGL全称是Graphics Library,即图形库,是用于渲染2D、3D图像的一个跨语言、跨平台的应用程序编程接口(API)。它被广泛应用于游戏开发、科学可视化、虚拟现实等领域。OpenGL通过与硬件直接交互,提供了一种高效的...

    C++开发OPENGL常用库(包含glaux相关文件)

    OpenGL是一种用于渲染2D和3D图形的跨语言、跨平台的应用程序编程接口(API)。在C++中开发OpenGL程序时,通常会依赖一些库来简化编程过程并提供额外的功能。这个压缩包包含了几个关键的库文件和头文件,它们是OpenGL...

    OpenGL API下的光线投射(RayCasting)

    OpenGL API下的光线投射(RayCasting)是一种在3D图形渲染中常用的技术,它涉及到计算机图形学的核心概念。光线投射是通过模拟光在虚拟世界中的传播来创建图像的过程,这种方法可以产生高度真实的视觉效果,包括深度...

    opengl开发中常用的库有GLEW,GLAD,GLFW,GLUT

    它提供了简洁的API,让开发者可以轻松创建全屏或窗口模式的应用,并管理键盘、鼠标、手柄等输入设备。GLFW还支持多个同时打开的窗口,以及现代OpenGL特性如framebuffer对象和定时器回调。 4. **GLUT (OpenGL ...

    OpenGL的常用配置文件

    本篇文章将详细介绍OpenGL的常用配置文件,以及如何解决配置过程中的常见问题。 首先,我们来看看压缩包中的文件: 1. **glaux.dll**:这是一个辅助库,提供了用于OpenGL的一些便利函数。Gluaux库主要包含了一些...

    android常用api接口

    适合adt 开发 android 的常用api接口,包括Wi-Fi APIWi-Fi API为应用程序提供了一种与那些带有Wi-FI网络接口的底层无线堆栈相互交流的手段。几乎所有的请求设备信息都是可利用的,包括网络的连接速度、IP地址、当前...

    OpenGL函数参考

    其次,`OpenGL函数查询.doc`是一个Word文档,可能是一个中文版的OpenGL常用函数整理,特别适合初学者或对中国语言更熟悉的开发者。文档中可能对一些最常用和最重要的函数进行了注解,如glBegin和glEnd用于定义图元的...

Global site tag (gtag.js) - Google Analytics