OpenGL

生活百科 2023-01-26 08:57生活百科www.aizhengw.cn

OpenGL

OpenGL(英语Open Graphics Library,译名开放图形库或者“开放式图形库”)是用于渲染2D、3D矢量图形的跨语言、跨平台的应用程式编程接口(API)。这个接口由近350个不同的函式调用组成,用来绘製从简单的图形比特到複杂的三维景象。而另一种程式接口系统是仅用于Microsoft Windows上的Direct3D。OpenGL常用于CAD、虚拟现实、科学可视化程式和电子游戏开发。

OpenGL的高效实现(利用了图形加速硬体)存在于Windows,部分UNIX平台和Mac OS。这些实现一般由显示设备厂商提供,而且非常依赖于该厂商提供的硬体。开放原始码库Mesa是一个纯基于软体的图形API,它的代码兼容于OpenGL。,由于许可证的原因,它只声称是一个“非常相似”的API。

OpenGL规范由1992年成立的OpenGL架构评审委员会(ARB)维护。ARB由一些对创建一个统一的、普遍可用的API特别感兴趣的公司组成。根据OpenGL官方网站,2002年6月的ARB投票成员包括3Dlabs、Apple Computer、ATI Technologies、Dell Computer、Evans & Sutherland、Hewlett-Packard、IBM、Intel、Matrox、NVIDIA、SGI和Sun Microsystems,Microsoft曾是创立成员之一,但已于2003年3月退出。

基本介绍

  • 中文名开放图形库(英文Open Graphics Library的缩写)
  • 外文名Open Graphics Library
  • 平台Windows、类Unix、Linux、MacOS
  • 是否开源
  • 最近更新日期2018-07-30
  • 软体类别开放库档案
  • 介绍三维图形处理库,属于工业标準

简介

OpenGL(英语Open Graphics Library,译名开放图形库或者“开放式图形库”)是用于渲染2D、3D矢量图形的跨语言、跨平台的应用程式编程接口(API)。这个接口由近350个不同的函式调用组成,用来从简单的图形比特绘製複杂的三维景象。而另一种程式接口系统是仅用于Microsoft Windows上的Direct3D。OpenGL常用于CAD、虚拟实境、科学可视化程式和电子游戏开发。
OpenGL的高效实现(利用了图形加速硬体)存在于Windows,部分UNIX平台和Mac OS。这些实现一般由显示设备厂商提供,而且非常依赖于该厂商提供的硬体。开放原始码库Mesa是一个纯基于软体的图形API,它的代码兼容于OpenGL。,由于许可证的原因,它只声称是一个“非常相似”的API。
OpenGL规范由1992年成立的OpenGL架构评审委员会(ARB)维护。ARB由一些对创建一个统一的、普遍可用的API特别感兴趣的公司组成。根据OpenGL官方网站,2002年6月的ARB投票成员包括3Dlabs、Apple Computer、ATI Technologies、Dell Computer、Evans & Sutherland、Hewlett-Packard、IBM、Intel、Matrox、NVIDIA、SGI和Sun Microsystems,Microsoft曾是创立成员之一,但已于2003年3月退出。

设计

图形管线
OpenGL规范描述了绘製2D和3D图形的抽象API。儘管这些API可以完全通过软体实现,但它是为大部分或者全部使用硬体加速而设计的。
OpenGL的API定义了若干可被客户端程式调用的函式,以及一些具名整型常量(例如,常量GL_TEXTURE_2D对应的十进制整数为3553)。虽然这些函式的定义表面上类似于C程式语言,但它们是语言独立的。,OpenGL有许多语言绑定,值得一提的包括JavaScript绑定的WebGL(基于OpenGL ES 2.0在Web浏览器中的进行3D渲染的API);C绑定的WGL、GLX和CGL;iOS提供的C绑定;Android提供的Java和C绑定。
OpenGL不仅语言无关,而且平台无关。规范只字未提获得和管理OpenGL上下文相关的内容,而是将这些作为细节交给底层的视窗系统。出于同样的原因,OpenGL纯粹专注于渲染,而不提供输入、音频以及视窗相关的API。
OpenGL是一个不断进化的API。新版OpenGL规范会定期由Khronos Group发布,新版本通过扩展API来支持各种新功能。每个版本的细节由Khronos Group的成员一致决定,包括显示卡厂商、作业系统设计人员以及类似Mozilla和谷歌的一般性技术公司。
除了核心API要求的功能之外,GPU供应商可以通过扩展的形式提供额外功能。扩展可能会引入新功能和新常量,并且可能放鬆或取消现有的OpenGL函式的限制。然后一个扩展就分成两部分发布包含扩展函式原型的头档案和作为厂商的设备驱动。供应商使用扩展公开自定义的API而无需获得其他供应商或Khronos Group的支持,这大大增加了OpenGL的灵活性。OpenGL Registry负责所有扩展的收集和定义。
每个扩展都与一个简短的标识符关係,该标识符基于开发公司的名称。例如,英伟达(nVidia)的标识符是NV。如果多个供应商同意使用相同的API来实现相同的功能,那幺就用EXT标誌符。这种情况更进一步,Khronos Group的架构评审委员(Architecture Review Board,ARB)正式批准该扩展,那幺这就被称为一个“标準扩展”,标识符使用ARB。第一个ARB扩展是GL_ARB_multitexture。
OpenGL每个新版本中引入的功能,特别是ARB和EXT类型的扩展,通常由数个被广泛实现的扩展功能组合而成。

文档

OpenGL普及的部分原因是其高质量的官方档案。OpenGL架构评审委员会随规范一同发布了一系列包含API变化更新的手册。这些手册因其封面颜色而众所周知。
  • 红宝书
Dave Shreiner, Graham Sellers, John M. Kessenich and Bill M. Licea-Kane. 2013.OpenGL Programming Guide: The Official Guide to Learning OpenGL, Version 4.3(8th Edition). Addison-Wesley Professional.ISBN 978-0321773036.
  • 橙宝书
Randi J. Rost, Bill M. Licea-Kane, Dan Ginsburg, John M. Kessenich, Barthold Lichtenbelt, Hugh Malan and Mike Weiblen. 2009.OpenGL Shading Language (3rd Edition). Addison-Wesley Professional.ISBN 978-0321637635

相关程式库

早期的 OpenGL 版本会一同发布配套的GLU库,提供一些代硬体尚不支持的简单功能。GLU 一次更新规格要求是在 1998 年,对已弃用的 OpenGL 特性有依赖。
还有几个库也创建在OpenGL之上,提供了OpenGL本身没有的功能
  • GLFW
  • GLUT
  • GLEW、GLEE
特别是,OpenGL Performer库——由SGI开发并可以在IRIX、Linux和Microsoft Windows的一些版本上使用,构建于OpenGL,可以创建实时可视化仿真程式。
当开发者需要使用最新的OpenGL扩展时,他们往往需要使用GLEW库或者是GLEE库提供的功能,可以在程式的运行期判断当前硬体是否支持相关的扩展,防止程式崩溃甚至造成硬体损坏。这类库利用动态载入技术(dlsym、GetProcAddress等函式)搜寻各种扩展的信息。

上下文与视窗包

OpenGL 上下文(英语OpenGL context)的创建过程相当複杂,在不同的作业系统上也需要不同的做法。很多游戏开发和用户界面库都提供了自动创建 OpenGL 上下文的功能,其中包括SDL、Allegro、SFML、FLTK、Qt等。也有一些库是专门用来创建 OpenGL 视窗的,其中最早的便是GLUT,后被freeglut取代,比较新的也有GLFW可以使用。
  • 以下包可以用来创建并管理 OpenGL 视窗,也可以管理输入,但几乎没有除此以外的其它功能
  • GLFW——跨平台视窗和键盘、滑鼠、手柄处理;偏向游戏
  • freeglut——跨平台视窗和键盘、滑鼠处理;API 是 GLUT API 的超集,也比 GLUT 更新、更稳定
  • GLUT——早期的视窗处理库,已不再维护
支持创建 OpenGL 视窗的还有一些“多媒体库”,还支持输入、声音等类似游戏的程式所需要的功能
  • Allegro 5——跨平台多媒体库,提供针对游戏开发的 C API
  • SDL——跨平台多媒体库,提供 C API
  • SFML——跨平台多媒体库,提供 C++ API;也提供 C#、Java、Haskell、Go 等语言的绑定
视窗包
  • FLTK——小型的跨平台 C++ 视窗组件库
  • Qt——跨平台 C++ 视窗组件库,提供了许多 OpenGL 辅助对象,抽象掉了桌面版 OpenGL 与 OpenGL ES 之间的区别
  • wxWidgets——跨平台 C++ 视窗组件库

历史

1980年代,开发可以用在各种各样图形硬体上的软体是个真正的挑战。通常,软体开发人员为每种硬体编写自定义的接口和驱动程式。但这非常昂贵并会导致大量工作的重複。
20世纪90年代初,SGI成为工作站3D图形领域的领导者。其IRISGL的API被认为是最先进的科技并成为事实上的行业标準,而基于开放标準的PHIGS则相形见绌。IRIS GL更容易使用,而且还支持即时模式的渲染。相比之下,PHIGS难于使用并且功能老旧。
SGI的竞争对手(包括Sun、惠普和IBM)通过扩展PHIGS标準也能将3D硬体投入市场。这反过来导致SGI市场份额的削弱,因为有越来越多的3D图形硬体供应商进入市场。为攻占市场,SGI决定把IRIS GL API转变为一项开放标準,即OpenGL。
,SGI拥有大量的软体客户,对他们来说从IRIS GL迁移到OpenGL将需要巨额投资。,IRIS GL的应用程式接口拥有与3D图形不相关的函式。例如,它包括视窗、键盘和滑鼠的API,部分原因是由于它是在X Window系统和Sun公司的NeWS系统之前开发的。而且,IRIS GL库由于授权和专利问题并不适合开放。上述种种因素要求SGI继续支持先进和专有的IRIS Inventor和IRIS Performer应用程式接口。
IRIS GL的限制之一是只能访问由底层硬体支持的功能。如果图形硬体不支持一项功能,那幺该应用程式将不能使用它。OpenGL通过为硬体不具备的功能提供软体支持克服了此问题,这就允许应用程式在相对较弱的系统中使用先进的图形技术。OpenGL标準化了访问硬体的方式硬体接口程式的开发(有时也称为设备驱动程式)交由硬体製造商,而视窗功能委託给底层作业系统。让大量不同种类的图形硬体讲同一种语言影响深远,它为软体开发者进行3D软体发展提供了更高层次的平台。
1992年,SGI公司领导了OpenGL架构审查委员会(OpenGL ARB)的创建。该委员会由若干公司组成,负责未来OpenGL规范的维护和扩展。
微软在1995年发布Direct3D,Direct 3D最终成为OpenGL的主要竞争对手。1997年12月17日,微软和SGI发起华氏温标项目,旨在统一OpenGL和Direct3D的接口。1998年,惠普加入。后来,由于SGI的财政限制、微软的战略以及缺乏行业普遍支持,项目1999年遭弃。
2006年7月,OpenGL架构评审委员会投票决定将OpenGL API标準的控制权交给Khronos Group。

绑定

为了加强它的多语言和多平台特性,已经用很多语言开发了OpenGL的各种绑定和移植。最值得注意的是,Java3D库已经可以利用OpenGL(另一个选择可能是DirectX)作为它的硬体加速了。OpenGL官方网页[1]列出了用于Java、Fortran 90、Perl、Pike、Python、Ada和Visual Basic的多个绑定。

高级功能

OpenGL被设计为只有输出的,所以它只提供渲染功能。核心API没有视窗系统、音频、列印、键盘/滑鼠或其他输入设备的概念。虽然这一开始看起来像是一种限制,但它允许进行渲染的代码完全独立于他运行的作业系统,允许跨平台开发。,有些集成于原生视窗系统的东西需要允许和宿主系统互动。这通过下列附加API实现
  • GLX- X11(包括透明的网上)
  • WGL-MicrosoftWindows
,GLUT库能够以可移植的方式提供基本的视窗功能。

版本

OpenGL进化自(而且风格很相似)SGI的早期3D接口IRIS GL。IRIS GL的一个限制是它只能访问底层硬体提供的特性。如果图形硬体不支持例如纹理映射这样的功能,那幺应用程式就不能使用它。OpenGL通过在软体上对硬体不支持的特性提供支持的方法克服了这个问题,允许应用程式在相对低配置的系统上使用高级的图形特性。Fahrenheit项目是Microsoft和SGI之间的联合行动,为了统一OpenGL和Direct3D接口的目的。它一开始提出了一些把规则带给互动3D计算机图形API世界的承诺,但因为SGI的财政限制,这个项目后来被放弃了。
2002年微软的DirectX 9提出了全新的Shader绘图功能以及高端着色语言(HLSL),OpenGL霸主地位开始被瓦解。这使得3DLabs了解到必须开发全新的OpenGL 2.0版本,但仅加入支持GLSL的功能。2006年Khronos接手OpenGL,立刻着手发展Longs Peak与Mount Evans。2008年推出OpenGL 3,但评价普遍不高。
2010年3月10日, OpenGL推出了3.3和4.0版本,同年7月26日又发布了4.1版本。2011年8月8日发布4.2版本。2013年发布4.3版。

参见

  • Khronos Group
  • OpenGL ES
上一篇:cell处理器 下一篇:polyurethane

Copyright@2015-2025 www.aizhengw.cn 癌症网版板所有