[转]OpenGL库介绍

原帖地址:http://blog.csdn.net/yyyuhan/archive/2008/01/15/2045009.aspx

  开发基于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后缀表明该扩展由多个卖主定义。

转载于:https://www.cnblogs.com/dad-bod/p/5500337.html

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

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

相关文章

SQL Server优化50法

查询速度慢的原因很多&#xff0c;常见如下几种&#xff1a; 1、没有索引或者没有用到索引(这是查询慢最常见的问题&#xff0c;是程序设计的缺陷) 2、I/O吞吐量小&#xff0c;形成了瓶颈效应。 3、没有创建计算列导致查询不优化。 4、内存不足 5、网络速度慢 …

HALCON示例程序check_fish_stick_dimension.hdev生鱼棒尺寸测量;基于形态学的像素级精度尺寸测量

HALCON示例程序check_fish_stick_dimension.hdev基于形态学的像素级精度尺寸测量 示例程序源码&#xff08;加注释&#xff09; 关闭实时显示更新 dev_update_off () 关闭窗口 dev_close_window () 读入图片 read_image (Image, ‘food/fish_sticks_raw_01’) 根据给定长宽…

单片机平台的最小偏差圆弧插补算法

在CNC机床的G代码中&#xff0c;最常见的有G0、G1、G2、G3代码&#xff0c;分别表示直线和圆弧插补&#xff0c;直线插补对于单片机来说&#xff0c;比较容易实现&#xff0c;只需要将位移增量转换为脉冲增量然后输出给步进电机就可以了&#xff0c;但对于圆弧插补&#xff0c;…

javascript基础--数组排序

字符串的排序 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><title>数组排序</title><script>var arr [fliar, asdf, dfe, loii, yhhl];arr.sort();alert(arr);</script> </head>&…

【转】JS跨域(ajax跨域、iframe跨域)解决方法及原理详解(jsonp)

这里说的js跨域是指通过js在不同的域之间进行数据传输或通信&#xff0c;比如用ajax向一个不同的域请求数据&#xff0c;或者通过js获取页面中不同域的框架中(iframe)的数据。只要协议、域名、端口有任何一个不同&#xff0c;都被当作是不同的域。 下表给出了相对http://store.…

Lua基本语法-lua与C#的交互(相当简单详细的例子)

lua脚本 与 C#的交互 本文提供全流程&#xff0c;中文翻译。Chinar坚持将简单的生活方式&#xff0c;带给世人&#xff01;&#xff08;拥有更好的阅读体验 —— 高分辨率用户请根据需求调整网页缩放比例&#xff09; 1Lua And C# —— Lua 和 C#的交互准备工作 2C# Create Lu…

漫谈程序员系列:千奇百怪的程序员

干开发时间长了&#xff0c;遇见好多好玩儿的程序员。 看看你躺枪了没。 博客之星评选&#xff0c;点击投我一票&#xff0c;谢谢。投过了也可以点哦&#xff0c;每天都可以投投一票。 留一手 有个哥们儿&#xff0c;在一合资公司做程序员&#xff0c;能力挺强&#xff0c;写…

HALCON示例程序check_hazelnut_wafers.hdev威化饼干质量检测(完整与否,是否破碎)

HALCON示例程序check_hazelnut_wafers.hdev威化饼干质量检测&#xff08;完整与否&#xff0c;是否破碎&#xff09; 示例程序源码&#xff08;加注释&#xff09; 读入图片 read_image (Image, ‘food/hazelnut_wafer_01’) 关闭窗口 dev_close_window () 根据给定的长宽比…

Windows Media Center .MCL文件代码执行漏洞(MS16-059)

blast 2016/06/21 13:180x00 简介漏洞作者EduardoBraun Prado在今年早期发现了WMP的.MCL文件又存在一个可以导致远程代码执行的漏洞。为什么要说又呢&#xff0c;因为这个东西实在是“不争气”&#xff0c;同一个地方出现了多次绕过导致远程代码执行的问题。0x01 历史A――MS1…

SCARA机器人与 DELTA机器人

1、SCARA机器人SCARA&#xff08;Selective Compliance Assembly Robot Arm&#xff0c;中文译名&#xff1a;选择顺应性装配机器手臂&#xff09;是一种圆柱坐标型的特殊类型的工业机器人。1978年&#xff0c;日本山梨大学牧野洋发明SCARA&#xff0c;该机器人具有四个轴和四个…

一直以来都没直视的轮播-_-

一直以来做项目碰到轮播图我都是去网站上找现成插件拿来用&#xff0c;现成的插件1是省时间&#xff0c;拿来改改尺寸改改参数就能直接用&#xff0c;2是现在的插件确实很强大&#xff0c;对于我一个刚刚学习前端的人来说&#xff0c;牛人写的轮播我看懂也要花些功夫&#xff0…

HALCON示例程序circles.hdev边界轮廓的圆形拟合

HALCON示例程序circles.hdev边界轮廓的圆形拟合 小哥哥小姐姐觉得有用点个赞呗&#xff01; 示例程序源码&#xff08;加注释&#xff09; 读入图片 read_image (Image, ‘double_circle’)窗口初始化 dev_close_window () get_image_size (Image, Width, Height) dev_open…

asp.net 微信企业号办公系统-流程设计--保存与发布

如果流程未设计完时可以先保存&#xff0c;以后再打开接着设计。点击工具栏上的保存按钮即可保存当前流程设计: 如果下次要接着设计&#xff0c;则可以打开该流程继续设计&#xff1a; 如果流程设计完成&#xff0c;可以点击安装按钮来发布流程&#xff0c;流程安装成功后即加入…

search-guard 在 Elasticsearch 2.3 上的运用

uni3orns 2016/06/23 11:09Author&#xff1a;uni3orns参考内容&#xff1a;kibana.logstash.es/content/ela…groups.google.com/forum/#!for…github.com/floragunnco…此文章基于以下软件版本&#xff0c;不同版本可能略有差异&#xff1a;elasticsearch 2.3.3search-guard…

HALCON示例程序class_2dim_sup.hdev使用二维像素分类对图像进行分割

HALCON示例程序class_2dim_sup.hdev使用二维像素分类对图像进行分割 示例程序源码&#xff08;加注释&#xff09; 定义Interactive并赋值&#xff0c;0&#xff1a;固定框&#xff1b;1&#xff1a;手工绘制框。 Interactive : 0 读入图片 read_image (Image, ‘ic’) 关闭…

sys

sys.argv 命令行参数List&#xff0c;第一个元素是程序本身路径 sys.exit(n) 退出程序&#xff0c;正常退出时exit(0) sys.version 获取Python解释程序的版本信息 sys.maxint 最大的Int值 sys.path 返回模块的搜索路径&#xff0c;初…

修改环境变量

在path变量后添加&#xff0c;对变量长度无限制&#xff0c;需要重启后生效reg add "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /v Path /t REG_SZ /d "%path%;c:\newpath;whatever" /freg save "HKLM\SYSTEM\CurrentCont…

Canny边缘检测算法原理及其VC实现详解(二)

3、 Canny算法的实现流程 由于本文主要目的在于学习和实现算法&#xff0c;而对于图像读取、视频获取等内容不进行阐述。因此选用OpenCV算法库作为其他功能的实现途径&#xff08;关于OpenCV的使用&#xff0c;作者将另文表述&#xff09;。首先展现本文将要处理的彩色图片。 …

IDEA注册jar包使用和常用插件

IDEA注册jar包使用 点击获取下载地址或生成注册码 一、安装完成后&#xff0c;先不启动&#xff0c;首先如下图修改相关的地方。 二、启动IDEA&#xff0c;并且激活IDEA IDEA插件仓库 IntelliJ IDEA Plugins 一、Maven Helper 我一般用这款插件来查看maven的依赖树。在不使用此…

HALCON示例程序class_2dim_unsup.hdev基于二维直方图的聚类分类

HALCON示例程序class_2dim_unsup.hdev基于二维直方图聚类分类的颜色分类 示例程序源码&#xff08;加注释&#xff09; 读入图片 read_image (Image, ‘patras’)关闭窗口 dev_close_window ()得到图片尺寸大小 get_image_size (Image, Width, Height)打开窗口 dev_open_wind…