OpenGL开发库的详细介绍

OpenGL开发库的组成

开发基于OpenGL的应用程序,必须先了解OpenGL的库函数。它采用C语言风格,提供大量的函数来进行图形的处理和显示。OpenGL库函数的命名方式非常有规律。所有OpenGL函数采用了以下格式
<库前缀><根命令><可选的参数个数><可选的参数类型>
库 前缀有gl、glu、aux、glut、wgl、glx、agl等等,分别表示该函数属于OpenGL那个开发库等,从函数名后面中还可以看出需要多少个 参数以及参数的类型。I代表int型,f代表float型,d代表double型,u代表无符号整型。例如glVertex3fv()表示了该函数属于 gl库,参数是三个float型参数指针。我们用glVertex*()来表示这一类函数。
图1
OpenGL 函数库相关的API有核心库(gl)、实用库(glu)、辅助库(aux)、实用工具库(glut)、窗口库(glx、agl、wgl)和扩展函数库等。 从图1可以看出,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库的函数功能相同。创建网状体和实心体。如glutSolidSphere()、glutWireSphere()等。在此不再叙述。
菜单函数。创建添加菜单的函数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 扩展也不是没有缺点,正因为各个硬件厂商都可以开发自己的扩展,所以扩展的数目比较大,而且有点混乱,有些扩展实现的相同的功能,可因为是不同厂商开发 的,接口却不一样,所以程序中为了实现这个功能,往往要为不同的显卡写不同的程序。这个问题在OpenGL 2.0出来后可能会得到解决,OpenGL 2.0的一个目标就是统一扩展,减少扩展数目。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/452927.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

thinkphp5运行原理_ThinkPHP5.1~5.2全版本远程代码执行高危漏洞预警

漏洞综述关于ThinkPHPThinkPHP是一个快速、兼容而且简单的轻量级国产PHP开发框架&#xff0c;其借鉴了国外很多优秀的框架和模式&#xff0c;包括使用面向对象的开发结构和MVC模式&#xff0c;融合了Struts的思想和TagLib(标签库)、RoR的ORM映射和ActiveRecord模式等。该框架常…

ASP.NET MVC中controller和view相互传值的方式

ASP.NET MVC中Controller向view传值的方式&#xff1a; ViewBag、ViewData、TempData单个值的传递Json匿名类型ExpandoObjectCookieViewModel(向普通View页面传个Model对象、向强类型页面传一个Model对象、用一个ViewModel对象解决所有问题)ASP.NET MVC中view向Controller传值的…

自定义SeekBar 实时显示百分比进度

进度下方实时显示百分比进度禁止掉了SeekBar的滑动事件 详情 githus地址

数据结构与算法--3.字符串的旋转

题目&#xff1a; A是含有n个元素的数组&#xff0c;如果可以申请到最大内存&#xff0c;那么把A从位置i开始旋转是比较简单的。例如&#xff1a;A:a,b,c,d,e.其中i3,旋转后的字符串A为&#xff1a;d,e,a,b,c要求设计一个时间复杂度为O(n),空间复杂度为O(1)的算法&#xff0c;…

三网融合情况下,实时语音通信技术解决之道

随着技术和标准的不断成熟,伴随着“三网合一”的大潮,VoIP可望成为下一代电信基础设施结构的杨心,使未来各电信业务综合统一在IP网络上成为可能,导致数据的融合和未来电信市场的重组,并带来新的经济模式和价值链。 Internet在全世界范围内的快速发展和语音信号处理技术的进步,促…

ipv6相对于ipv4的改进

v更大的地址空间&#xff1a;16字节&#xff0c;128位v首部的简化&#xff1a;只有7个固定域&#xff0c;撤消了有关分段的域和校验和域&#xff0c;以便更快地处理分组&#xff0c;提高路由器的吞吐量缩短延时。v更好地支持选项&#xff1a;选项是有次序的&#xff0c;以便路由…

轻量高效的开源JavaScript插件和库 【转】

图片布局轮播图弹出层音频视频编辑器字符串表单存储动画时间其它加载器构建工具测试包管理器CDN图片 baguetteBox.js - 是一个简单易用的响应式图像灯箱效果脚本。demoLightgallery.js - 是一个功能齐全的JavaScript图像灯箱插件。demoviewerjs - 是一个图像预览插件。democrop…

Linux内核中的常用宏container_of其实很简单【转】

转自&#xff1a;http://blog.csdn.net/npy_lp/article/details/7010752 开发平台&#xff1a;Ubuntu11.04 编 译器&#xff1a;gcc version 4.5.2 (Ubuntu/Linaro4.5.2-8ubuntu4) Container_of在Linux内核中是一个常用的宏&#xff0c;用于从包含在某个结构中的指针获得结构本…

mysql concat例子_MYSQL中CONCAT详解

concat()函数1. 功能&#xff1a;返回结果为连接参数产生的字符串。如有任何一个参数为NULL &#xff0c;则返回值为 NULL。2. 语法concat(str1, str2,...)3. 例子案例一&#xff1a;mysql> select concat(苹果,香蕉,梨子);------------------------------| CONCAT(苹果,香蕉…

常见的状态响应码

200&#xff1a;请求正常&#xff0c;服务器正常的返回数据 301&#xff1a;永久重定向。比如在访问www.jingdong.com的时候&#xff0c;会重定向到www.jd.com。 302&#xff1a;临时重定向。比如在访问一个需要登录的界面时&#xff0c;而此时没有登录&#xff0c;那么就会重定…

软件行业为什么那么多项目经理

记得听谁说过&#xff0c;软件行业的项目经理太滥了&#xff0c;二十几岁的毛头小伙子&#xff0c;动不动就是项目经理&#xff0c;手下没几个人&#xff0c;管的也没几个事&#xff0c;在其他行业&#xff0c;项目经理一般都是四五十岁的老头子做&#xff0c;要联系这&#xf…

ipv6的表示方法

v冒分十六进制表示法X:X:X:X:X:X:X:X 其中X表示地址中16位二进制数的十六进制值 例&#xff1a;FEDC:BA98:7654:3210:FEDC:BA98:7654:3210 v零压缩法如其中有多个连续的零&#xff0c;则可用零压缩法 如 &#xff1a;1080:0000:0000:0000:0008:0800:200C:417A 可写成&am…

mysql php7安装配置_centos7无网络下安装部署php7.1.33+mysql5.7.28+apache2.4.6-Go语言中文社区...

centos7无网络下安装部署php7.1.33mysql5.7.28apache2.4.6一、1、先ping www.baidu.com&#xff0c;root账户下&#xff0c;如果未联网&#xff0c;创建目录&#xff0c;把提前下载好的rpm包拷贝到rpm目录下如图&#xff1a;(如果没有安装包请查看我的另一篇教程下载这些安装包…

webkit渲染

2019独角兽企业重金招聘Python工程师标准>>> 参考链接 理解WebKit和Chromium 简明魔法学院 Chrome软件渲染 WebKit渲染基础 Webkit 渲染基础 Webkit不是浏览器,它是一个渲染引擎 软件渲染 硬件渲染(GPU加速) 会触发GPU加速的属性 CSS3 3D transformation, trans…

element ui中dialog相关问题

一&#xff0c;今天需要在dialog里面引入另一个页面&#xff0c;就是打开dialog显示该页面&#xff08;把页面放到dialog中&#xff09;&#xff0c;引入的语句如下&#xff1a; <iframe src"view?pathrkdj_b" ></iframe> 二&#xff0c;使用table组件时…

数据结构与算法--4.使用堆栈模拟队列

问题&#xff1a; 队列的插入和删除遵循先入先出的原则&#xff0c;而堆栈遵循后进先出的原则。用两个堆栈模拟队列&#xff0c;要求实现时不能分配超过O&#xff08;1&#xff09;的内存&#xff0c;时间复杂度必须是o&#xff08;m&#xff09;。 思路&#xff1a; 用两个…

IT行业的你,在成本部门还是利润部门

题外话&#xff1a;本文应该引起项目管理者和开发人员的思考&#xff1a;如何进行薪酬管理&#xff1f;如何规划职业生涯&#xff1f; 生在IT行业&#xff0c;发现周围很多朋友对薪酬问题有疑问&#xff0c;因为这种不解&#xff0c;导致经常带情绪&#xff0c;对工作、生活很…

ipv4到ipv6的过渡

v双协议站&#xff1a;过渡时期&#xff0c;站点必须同时支持IPv4和IPv6v隧道技术&#xff1a;IPv6主机之间通信必须使用IPv4的隧道v首部转换&#xff1a;用于发送方使用IPv6&#xff0c;而接收方使用IPv4

关于爬虫中常见的两个网页解析工具的分析 —— lxml / xpath 与 bs4 / BeautifulSoup...

http://www.cnblogs.com/binye-typing/p/6656595.html 读者可能会奇怪我标题怎么理成这个鬼样子&#xff0c;主要是单单写 lxml 与 bs4 这两个 py 模块名可能并不能一下引起大众的注意&#xff0c;一般讲到网页解析技术&#xff0c;提到的关键词更多的是 BeautifulSoup 和 xpat…

java如何去掉html标签_Java后端去掉HTML标签获取纯文本-Fun言

今天又对我的博客首页进行了一次版本的更新&#xff0c;使其自适应屏幕&#xff0c;获得更好的用户体验&#xff0c;然后就出现点小问题&#xff0c;那就是原来的摘要是人为添加的&#xff0c;有长有短&#xff0c;对自适应屏幕有影响&#xff0c;所以我们现在是截取文章的前20…