OpenGLとは?
グラフィックス インターフェイス
多くの Windows プログラマは、高度なグラフィックス処理を実現するためのテクノロジとして
DirectX という選択肢を保有していることでしょう
DirectX は GDI では実現が難しい高速なグラフィックスや入出力処理を実現してくれます
そのため、多くの Windows ゲームは DirectX を利用しています
しかし、筆者のソフトウェア開発戦略において
「特定企業の利益誘導となりかねない製品技術は学ばないし教えない」という
基本方針を貫いているため DirectX には強い抵抗がありました
DirectX は Microsoft Windows に強く依存した技術であり
再利用や将来性、移植性において疑問が残ります
筆者は、これに代わる技術を求めていました
方法のひとつとして考えたのが、独自のグラフィックス・インターフェイスの開発です
主に Windows と X Window で動作するインターフェイスを C++ を用いて開発するというものです
しかし、十分に使えるライブラリの完成には、半年以上の歳月が必要であることと、
システムが提供する機能を丸まる無視することは、生産性に疑問が残りました
そこで、思い出したのが OpenGL の存在です
OpenGL を用いれば、システムに依存しないプログラムを記述でき
DirectX に劣らない、3D グラフィックスを描画することができると考えたのです
OpenGL とは Silicon Graphics, Inc. の登録商標ですが
オペレーティングシステムを特定しない、ソフトウェア インターフェイスなので
極めて移植性が高く、多くのシステムで利用することができる利点があります
OpenGL は 3D グラフィックスの表示に必要な多くのコマンドを提供しています
これを呼び出せば、プラットフォーム固有のサービスを使わずにプログラムできるため
C 言語から OpenGL を呼び出せば、グラフィックス処理は極めてオープンになります
OpenGL はプラットフォームに依存しないインターフェイスなので
ウィンドウや入出力を制御するためのコマンドは含まれていません
こうした問題も、関連ライブラリである OpenGLUtility Toolkit などで解決することができます
OpenGL 関連ライブラリもまた、システムに依存しないオープンな仕組みになっています
この場では、OpenGL を用いて 3D グラフィックスプログラミングを解説します
すばらしいことに、OpenGL を用いたこの解説は、システムに依存しません
あなたがどのシステムを使っていようと、OpenGL がサポートされているのであれば
この場で紹介する技術を使ってプログラムを作ることができるでしょう
OpenGL と関連ライブラリ
OpenGL はすばらしいグラフィックス・インターフェイスですが
機能がシステムから完全に分離されているため、システムとの連携ができません
そこで、ウィンドウ・システムと連携するためのライブラリがいくつか存在します
まず考えられるんのが OpenGL Utility Toolkit/GLUTの存在です
これは、システムの機能を最大限に発揮させることはできませんし
システムの API を使う方法に比べれば、かなりやれることは制限されてしまいます
しかし、多くのシステムで GLUT がサポートされているため
OpenGL と GLUT を組み合わせれば、システムに依存しないソースコードを記述することができます
OpenGL + GLUT は、他のシステムへの移植も、ほとんど変更せずに実現できてしまうのです
システムに依存したコードを記述する場合は、システムが OpenGL 拡張ライブラリを提供します
つまり GLUT を使わなくても Win32 API で OpenGL を使うということが可能です
この場合は、Win32 API が OpenGL を使うための API を提供しています
例えば X Window System では、GLX と呼ばれる拡張機能を利用できます
Macintosh であれば AGL、Windows は WGL、OS/2 ならば PGL という API が提供されています
各システムで OpenGL を利用する方法は、この場では解説しません
また、OpenGL における比較的高水準な操作を提供する
OpenGL Utility Library/GLU と呼ばれるライブラリも存在します
GLU は、OpenGL の動作環境として、通常は標準でサポートされています