OpenGLの入門

  OpenGLの(英語:オープングラフィックライブラリ、翻訳:オープングラフィックライブラリまたは「オープングラフィックライブラリ」)は、クロスランゲージ、クロスプラットフォームのアプリケーション・プログラミング・インターフェース(API)の2D、3Dのベクトルグラフィックスをレンダリングするために使用されます。このインタフェースは、ほぼ350の異なる機能は、単純なものから複雑な三次元シーンにビットパターンを描画するために使用される組成物によって呼び出します。別のプログラム・インターフェース・システムは、Microsoft Windows上でのDirect3Dのために使用されているが。OpenGLは、一般的にCAD、バーチャルリアリティ、科学的可視化プログラムやビデオゲームの開発に使用されます。
OpenGLの(グラフィックスアクセラレーションハードウェアの使用)の効率的な実装では、Windows、UNIXプラットフォームとMac OSの一部のために存在します。これらの実装は、典型的には、表示装置の製造元によって提供され、ハードウェアの製造元に非常に依存しています。オープンソースライブラリメサは、コード互換性のOpenGLにある純粋なソフトウェアベースのグラフィックスAPI、です。しかし、その理由をライセンス供与するために、それだけで「非常によく似た」APIであることを主張します。
  OpenGLのアーキテクチャ審査委員会(ARB)1992によって維持OpenGLの仕様は、に設立されました。構図に特に関心の統一、企業、一般的に利用できるAPIを作成するための番号でARB。OpenGLの公式サイトによると、2002年6月ARB投票メンバーは3Dlabs社、アップルコンピュータ、ATI Technologies社、デルコンピュータ、エバンス&サザーランド、ヒューレット・パッカード、IBM、インテル、Matroxの、NVIDIA、SGIとサン・マイクロシステムズを含め、マイクロソフトが設立されました1メンバーが、2003年3月に終了しました。

簡単な紹介

  OpenGLの(英語:オープングラフィックライブラリ、翻訳:オープングラフィックライブラリまたは「オープングラフィックライブラリ」)は、クロスランゲージ、クロスプラットフォームのアプリケーション・プログラミング・インターフェース(API)の2D、3Dのベクトルグラフィックスをレンダリングするために使用されます。このインタフェースは、単純なものから、3次元シーンをレンダリングする複雑なグラフィックビットに、構図を呼び出し、ほぼ350異なる機能で構成されています。別のプログラム・インターフェース・システムは、Microsoft Windows上でのDirect3Dのために使用されているが。OpenGLは、一般的にCAD、バーチャルリアリティ、科学的可視化プログラムやビデオゲームの開発に使用されます。
OpenGLの(グラフィックスアクセラレーションハードウェアの使用)の効率的な実装では、Windows、UNIXプラットフォームとMac OSの一部のために存在します。これらの実装は、典型的には、表示装置の製造元によって提供され、ハードウェアの製造元に非常に依存しています。オープンソースライブラリメサは、コード互換性のOpenGLにある純粋なソフトウェアベースのグラフィックスAPI、です。しかし、その理由をライセンス供与するために、それだけで「非常によく似た」APIであることを主張します。
OpenGLのアーキテクチャ審査委員会(ARB)1992によって維持OpenGLの仕様は、に設立されました。構図に特に関心の統一、企業、一般的に利用できるAPIを作成するための番号でARB。OpenGLの公式サイトによると、2002年6月ARB投票メンバーは3Dlabs社、アップルコンピュータ、ATI Technologies社、デルコンピュータ、エバンス&サザーランド、ヒューレット・パッカード、IBM、インテル、Matroxの、NVIDIA、SGIとサン・マイクロシステムズを含め、マイクロソフトが設立されました1メンバーが、2003年3月に終了しました。
 

デザイン

グラフィックスパイプライン
  OpenGLのAPI仕様は、2Dおよび3Dグラフィックスの抽象的なレンダリングを説明しています。これらのAPIは完全にソフトウェアで実現することができますが、それはハードウェアアクセラレーションとデザインの使用のほとんどまたはすべてのためです。
OpenGLのAPIは、いくつかの関数を定義し、クライアントと呼ばれ、(3553に対応する整数例えば、一定GL_TEXTURE_2Dの10進数)整数定数名前の数であってもよいです。表面上に定義されたCプログラミング言語の機能に似ているが、それらは、言語に依存しています。そのため、OpenGLの多くの言語バインディングがあり、それは言及する価値がある、次のとおりでWebGLを結合するJavaScript(Webブラウザ3DレンダリングでAPIのOpenGL ES 2.0をベース); CバインディングWGL、GLXおよびCGL; iOSのプランをCバインディング; AndroidはJavaおよびCバインディングを提供します。
  OpenGLはないだけで、言語、およびプラットフォームに依存しないとは無関係です。仕様の取得と管理のOpenGLコンテキストは、関連するコンテンツを言及しますが、基本的なウィンドウシステムのように、これらの詳細。同じ理由で、OpenGLは純粋に入力、オーディオおよび関連するAPIの窓を設けずに、レンダリングに焦点を当てました。
  OpenGLは進化するAPIです。新しいOpenGLの仕様は、クロノス・グループ、APIを拡張することによって、新しい機能の多様性をサポートする新しいバージョンで定期的に公開されます。グラフィックスカードのメーカー、システム設計者およびMozillaとGoogleに似た一般的な動作のテクノロジー企業を含むクロノス・グループのメンバーによる全会一致の決定、内容の各バージョン。
  API関数のコア要件に加えて、GPUベンダーは、拡張フォームから追加機能を提供することができます。拡張機能は、新しい機能や新しい定数を導入すること、およびOpenGLの機能を既存の制限を緩和または削除することができます。拡張ヘッダファイルベンダーとデバイスドライバとしての機能のプロトタイプが含まれています。持続放出は、2つの部分に分割されます。サプライヤーは、APIは、他のサプライヤーまたは大幅にOpenGLの柔軟性を高めるクロノス・グループのサポートなしでカスタム拡張機能を公開して使用します。OpenGLのレジストリは、コレクションと定義のすべての拡張を担当しています。
  每个扩展都与一个简短的标识符关系,该标识符基于开发公司的名称。例如,英伟达(nVidia)的标识符是NV。如果多个供应商同意使用相同的API来实现相同的功能,那么就用EXT标志符。这种情况更进一步,Khronos Group的架构评审委员(Architecture Review Board,ARB)正式批准该扩展,那么这就被称为一个“标准扩展”,标识符使用ARB。第一个ARB扩展是GL_ARB_multitexture。
OpenGL每个新版本中引入的功能,特别是ARB和EXT类型的扩展,通常由数个被广泛实现的扩展功能组合而成。
 

相关程序库

  早期的 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 上下文(英语: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版。

おすすめ

転載: www.cnblogs.com/ybqjymy/p/12213315.html