OpenGL
OpenGL(オープンジーエル、Open Graphics Library)は、Khronosグループが策定しているグラフィックスハードウェアのアプリケーションプログラミングインタフェース (API)。2次元・3次元コンピュータグラフィックス両方が扱える。元々は、シリコングラフィックス (SGI) が開発していた。
OpenGLは、SGIをはじめ、ヒューレット・パッカード (HP)、サン・マイクロシステムズ(現オラクル)、IBM、SONY-NEWSなどのUNIXワークステーションの他、Linux、FreeBSDなどのPC UNIXに加え、Windows、Mac OS X等で使用できるクロスプラットフォームのAPIである。また、携帯電話、PDA(携帯情報端末)、家電など組み込み用途向けOpenGLのサブセット版であるOpenGL ESも存在する。
オープン仕様として公開され、幅広い処理系に対応しているため、広く一般に普及している。グラフィックデバイスとの直接通信を行なう抽象化レイヤーAPIであるため、非常に高速に動作し、高精度な3D画像を描画できる。有償・無償の豊富な補助ライブラリがあるのも特色として挙げられる。
2004年に発表されたOpenGL 2.0でシェーディング言語を仕様化するなど、時代に沿った多様な機能を持つようになっている。
目次
歴史
元々はSGIが自社ワークステーションで使用していたIRIS GLというシステムを改良し、移植性を高めたものである。 [1]
1992年以降は、OpenGL Architecture Review Board (ARB)により監修される事となる。このARBには、3Dlabs、アップル、AMD(旧ATI)、デル、Evans & Sutherland、HP、IBM、インテル、Matrox、NVIDIA、シリコングラフィックス、サン・マイクロシステムズ(現オラクル)が参加している。2006年9月21日以降からは、100以上の企業で構成される標準化団体クロノス・グループ (The Khronos Group) へ管理が移行し、OpenGL ARB Working Group (OpenGL ARB WG) となった。
オープンな仕様であるため、各種OSに移植または互換GLが作成され、またグラフィックチップベンダーもオープンソースOS用のドライバを用意するなど汎用性に富むライブラリとなっている。ベンダ独自の機能にも柔軟に対応できるため、いち早く最新ボードの3Dグラフィックスの最新技術を利用できる反面、ハードウェアを限定した汎用性のないアプリケーションも氾濫している。 OpenGL標準化への対応はやや遅い傾向にあったが、OpenGL 3.0以降、仕様の更新頻度は高まってきており、DirectX11に対して同等の機能を持つOpenGL 4.0のリリースも4ヶ月差に留まるなど、この傾向は変えられつつある。
特徴
OpenGLは画面(フレームバッファ)に描画することを前提に設計されている。3DCGを描画できると言っても、オフラインレンダラー(POV-Rayなど)のようなレイトレーシング法は標準ではサポートされておらず、ポリゴンなどのプリミティブ形状をリアルタイムに順序をもってラスタライズ(画素化)して合成する事で3DCGを描画する。そのため、形状同士が反映し合うような鏡のような反射、ガラスの屈折、投影、交差した半透明形状などを表現するには特殊なプログラミングが必要になる。
柔軟な画像処理を行うために、奥行き情報を記録してZバッファ法などに利用できる「デプスバッファ」、形状のインデックスを記録してマスク処理などを行える「ステンシルバッファ」、高精度なカラー合成などを行える「蓄積バッファ」など、特殊な画素情報がサポートされている。また、元来OpenGLやGPU内で固定的に処理されてきた頂点データやフラグメント(ラスタライズにより生成される画素)の処理をGPUの強力な処理能力を活かしつつプログラミング可能にするプログラマブルシェーダの登場と、それを制御するシェーディング言語GLSLの採用により、さらに多種多様な表現が可能になった。
また、パーティクル機能を主眼に置いたポイントスプライトをサポートしている。一般的にパーティクルや2次元画像のオブジェクトを3次元空間に合成する場合は、平板なポリゴンにテクスチャを張り、常に視点と平行になるよう調整する「ビルボード」と呼ばれる手法が使われているが、ポイントスプライトを使うことでビルボードに代わり、座標計算やプログラミングのコストを軽減できる。
補助・拡張ライブラリ
OpenGLそのものは、ハードウェアに近い低次のライブラリである。そのため、よりソフトウェアに近い、多くの高次の補助・拡張ライブラリが存在する。主に、3D描画機能を簡易化・拡張するもの、ウインドウシステムをサポートするもの、グラフィックス面以外の機能を付加するものに分けられる。
- GLU - カメラや球、円筒、曲面などの取り扱いを補助する
- GLX - X Window SystemでOpenGLを利用するためのライブラリ
- WGL - Microsoft WindowsでOpenGLを利用するためのライブラリ
- CGL, AGL, NSOpenGL (Cocoaの一部) - Mac OS XでOpenGLを利用するためのライブラリ
- GLUT - クロスプラットフォームのOpenGL対応ウィジェット・ツールキット
- FreeGLUT - GLUTの機能を強化した、上位互換ライブラリ [2]
- GLUI - GLUTをベースにしたウィジェットライブラリ
- AUX - ウィジェット・ツールキットであるが、古くなっておりGLUTの使用が推奨されている
- GLEW - GLSLなどのOpenGL拡張の使用を容易にするライブラリ [3]
- GLFW - クロスプラットフォームのOpenGL対応フレームワークツールキット [4]
- GLM - GLSLライクに記述できるC++向けの算術ライブラリ [5]
- PLIB - OpenGLを利用したゲーム開発ライブラリ
- OpenML
- OpenGL ES - 組み込みシステム (embedded system) 向けのOpenGLのサブセット
- OpenSceneGraph
- FLTK - クロスプラットフォームのOpenGL対応ウィジェット・ツールキット
- Open Inventor
弱点
テンプレート:独自研究 OpenGL単体では、Windows GDIやCocoaのような高レベルの文字列描画用APIが用意されていない[6][7][8]ため、あらかじめ文字が描画されたテクスチャを(画像ファイルから読み込むなどして)利用するか、プラットフォーム依存の高レベルAPI(例えばWindowsの場合はwglUseFontOutlines()関数[9]など)と連携する必要がある(クロスプラットフォームのユーティリティライブラリであるGLUTなどを使用すると、文字・文字列を描画することができるが、その機能はごく限られており、あくまでデバッグ用途などの簡易的なサポートにとどまる)。なお、Direct3Dも同様に文字列描画が弱点であるが、Direct2DやDirectWriteといった複雑な2D描画や文字列描画に特化した高レベル派生APIも整備されつつある。また、WPFではハードウェアに応じてDirect3Dが使用されるが、Direct2D/DirectWriteのようにAPIが高レベルに抽象化されており、複雑な2D描画や文字列描画にはDirect3DやOpenGLを直接使用するよりも向いている。
OpenGL 1.5
2003年にリリースされたOpenGL 1.5では、拡張機能としてプログラマブルシェーダー(GLSL 1.0)に初めて対応した。
OpenGL 2.x
2004年にリリースされたOpenGL 2.0では、シェーディング言語GLSLのバージョン1.1対応が標準仕様として盛り込まれた。
OpenGL 3.x
2008年にリリースされたOpenGL 3.0では、肥大化したOpenGL APIセット自体のシェイプアップを目的として2.x以前の世代を切り捨てる大幅なアップデートが行われ、多くの機能が非推奨・廃止予定になった。翌2009年3月に発表されたOpenGL 3.1では固定機能シェーダーが標準仕様から取り除かれ、拡張機能扱いとなった。また同年8月に発表されたOpenGL 3.2では、Direct3D 10で導入されたジオメトリシェーダーに正式対応した[10]。固定機能シェーダーの廃止やジオメトリシェーダーの対応などは、Direct3D 10の仕様と合致している。
OpenGL 4.x
2010年にリリースされたOpenGL 4.0では、Direct3D 11のハル シェーダー、テッセレータおよびドメイン シェーダーに相当する、テッセレーション制御シェーダー、テッセレーション プリミティブ ジェネレーターおよびテッセレーション評価シェーダーが搭載された[11]。また、2012年にリリースされたOpenGL 4.3では、Direct3D 11のコンピュート シェーダーと同様のGPGPU用演算シェーダーが追加搭載された[12]。これまでOpenGL仕様のアップデートのスピードはDirect3Dに比べて非常にゆっくりとしたものであったが、OpenGL 4は同等あるいはそれ以上の速度で進化しつつある。
DirectXとの関係
テンプレート:Seealso OpenGLは3Dグラフィックスを専門的に扱うライブラリである。対してMicrosoft DirectXは、ゲーム開発での利用を主な用途としており、グラフィックスのみならずサウンドや入力関連のAPIを含んでいる点で性質が異なる。 なお、OpenGLと直接比較されるべきAPIは、DirectX製品の一部、グラフィックスを司るDirect3Dである。
DirectXは主にWindowsやXboxプラットフォームでのゲーム開発等で多く用いられる(Linux上でDirectXを動作させるCedegaなどの例もある)。対してOpenGLはクロスプラットフォームであり、Windows用にも提供されているため、Windows環境でDirectXとOpenGLを両立させる事も可能である。
発祥がワークステーションである事やクロスプラットフォームである事から、CADや工業デザイン、科学技術計算や医療での視覚化等の業務分野では、Direct3D等のエンタテインメント用途重視のグラフィックスAPIよりもOpenGLが用いられる事が多い。そのため、ワークステーションや業務向けのGPUやビデオカード製品には、OpenGLに最適化された仕様の物が販売される傾向がある。OpenGL向けと称されているGPUにはNVIDIA社の『Quadro』シリーズや、ATIの『ATI FirePro(FireGL)』シリーズが存在し、デバイスドライバを含めた仕様がOpenGL用に最適化されている。しかしその反面、これらの製品ではDirectXを使用したアプリケーションでの性能が芳しくない傾向もある。コンシューマ向けの安価なビデオカード製品に対し、チップを交換したり、抵抗の位置をずらしたり、BIOSやデバイスドライバをOpenGL向け製品の物と交換する等で、OpenGL向け製品を模す物も一部存在するが、当然そのような改造を行った物はメーカの保証を受けられず、デバイスドライバのライセンス契約にも抵触するため、絶対に行ってはならない。
なお、Linux及びMac OS Xに対してはGPUベンダーからOpenGL用のドライバが供給されており、3PINステレオコネクタや10ビットカラー出力などのQuadroやFireProに固有のハードウェア機能は使用できないが、これらのOSと組み合わせることにより、一般向けビデオカードをワークステーションカードの代用品として使用することが可能となる。[1]
シリコングラフィックスとマイクロソフトはかつてOpenGLとDirect3Dの統合を目標として、Fahrenheitと呼ばれる3DグラフィックスAPIの共同開発を1997年に開始したことがあるが[2]、1999年の末までに計画は事実上頓挫している。また、マイクロソフト社はOpenGL ARBの設立時のメンバーでもあったが、2003年に脱退した。
OpenCLとの関係
OpenGL仕様を管理しているKhronosグループによって同様に管理されているオープン仕様のAPIとして、GPGPUを含む異種計算資源混在環境(ヘテロジニアス環境)用の並列コンピューティングAPIであるOpenCLが存在する。OpenCLにはDirect3DおよびOpenGLのグラフィックスリソースを扱うことのできる相互運用機能が存在するが、一方でOpenGLはバージョン4.3でDirectX同様にGPGPU用の演算シェーダーを導入している。ただし、OpenCLは依然としてヘテロジニアス環境に特化した幅広いプラットフォーム対応APIであるが、OpenGLの演算シェーダーはよりグラフィックス用途に特化したGPGPU用のものとなり、競合するというよりはむしろ相補的な役割を担うことになる。
脚注
関連項目
- DirectX
- Direct3D
- GLSL
- OpenCL
- OpenAL
- OpenGL ES
- OpenSL ES
- Mesa 3D
- VirtualGL
- ラッパー
- LWJGL - Java
- Java OpenGL - Java
- WebGL - JavaScript
- SDL
外部リンク
- OpenGL公式サイトテンプレート:En icon
- SGI公式サイトテンプレート:En icon
- Khronos group公式サイトテンプレート:En icon
- OpenGL.jp - FAQテンプレート:Ja icon
- GLUTによる「手抜き」OpenGL入門
- OpenGL Programming Guide - 通称「赤本 (red book)」と呼ばれる解説書テンプレート:En icon
- OpenGL Reference Manual - 通称「青本 (blue book)」と呼ばれるリファレンステンプレート:En icon