OpenGL (3D グラフィックス)
-- 目次 --
  1. 前書き
  2. OpenGL を使用するために
  3. サンプルプログラム
  4. glut で動画
  5. MFC
  6. その他
1. 前書き

OpenGL とは何かを説明するのが難しいので、英語版の Wikipedia の項目の冒頭に書かれていることを引用します。

OpenGL (Open Graphics Library) とは 2D あるいは 3D 計算機グラフィックスを描画するためのアプリケーションを 書くための、言語やプラットフォームに依存しない API を定義するための 標準仕様である。 インターフェースは 250 以上の異なるファンクション・コール から構成され、単純なプリミティブによって複雑な 3 次元画像を描くことに使用できる。 OpenGL は 1992 年にシリコン・グラフィックス社 (Silicon Graphics Inc. (SGI) ) によって 開発され、CAD, バーチャル・リアリティー, サイエンスの視覚化、情報の視覚化、フライト・シミュレーション に幅広く使用された。また、ビデオ・ゲームにも使用され、 Microsoft Windows の上の Direct3D と競合している。 OpenGL は非営利技術協会である Khronos Group によって維持されている。

OpenGL は OpenGL Architecture Review Board (OpenGL ARB) に管理されていましたが、2006 年の 7 月には Khronos Group に移管されることが 決まったようです。 マイクロソフトは 2003 年の 3 月までは OpenGL ARB のメンバーでした。

Microsoft Windows で OpenGL の機能を実現したのは Microsoft によるものが最初で、 Visual C++ には OpenGL 用のライブラリー (glaux.lib, glu32.lib, opengl32.lib) が付いていました。

Visual C++ 2005 Express には直接、付属していませんでしたが、Platform SDK をインストールするとその中に同梱されていました。ところが、 Visual C++ 2008 となってから、(Standard 版、Express 版のいずれの場合も) OpenGL ライブラリーの姿が消えました。

Windows SDK for Windows Server 2008 and .NET Framework 3.5

をインストールすると OpenGL 用の 3 つのライブラリーのうち、補助ライブラリーを 除く 2 つのライブラリーは一応手に入りますが、 補助ライブラリーを使用したプログラムは書くことができなくなりました。 そのため、以下では glut と呼ばれるライブラリーを使用することにします。

参考
  1. Java の上でも OpenGL を使用できます。これには私の別のページをご覧ください。
    JOGL (Java OpenGL)
  2. OpenGL で使用される射影変換などの解説もしてみましたが、 あまり良い出来栄えではありません。参考までに。
    >OpenGL のための一次変換と射影変換
2. OpenGL を使用するために

glut とは OpenGL Utility Toolkit の意味で、 もともと Mark Kilgard によって作成されましたが、 その後、N.Robins によって Microsoft Windows に移植されました。

注意
glut はできてからずいぶん時間がたっており、また今後、更新がありえないようです。 しかし glut に似たライブラリーはずいぶんたくさんあります。
GLUT-like Windowing Toolkits
glut は初期の OpenGL の機能しか持っていませんが、 3D グラフィックスというものがどういうものであるのかを、理解するには十分な機能があります。

Windows 版 glut のホームページ

http://www.xmission.com/~nate/glut.html
から glut-3.7.6-bin.zip をダウンロードして解凍します。抽出されたファイルの中で 次のファイルが必要となるものです。

種類 ファイル名
ヘッダーファイル glut.h
ライブラリーファイル glut32.lib
ダイナミックリンクライブラリーglut32.dll

ヘッダーファイルやライブラリーファイルは Visual C++ のサブフォルダーにコピーし、 ダイナミックリンクライブラリーは Windows の system フォルダにコピーする方が 便利ですが、一応ここでは何もせずに、直接、プロジェクトフォルダにコピーして 使用することにします。Visual C++ Express 版に関しては次をご覧ください。

Visual C++ 2008 に関して

glut の使用法は上の Windows 版の glut のホームページで手に入る

Documentation for the GLUT API

に書いてあります (PostScript, PDF での入手ができます。ダウンロードして印刷すれば ちゃんと読めます。無論英文です。) また Windows 版の glut のホームページ で手に入るソースコードを展開するとサンプルファイルがありますから、これを眺めるだけでも 使用法がわかります。(拡張子が dsp となっているファイルをダブルクリックすると、 Visual C++ が起動します。ビルドすると大抵実行できます。実行できないものは Windows では動かないもののようです。) GLUT (OpenGL Utility Toolkit) ガイド(日本語版) も 利用可能です:

The OpenGL Utility Toolkit (GLUT) Programming Interface API Version 3 (日本語)

3. サンプルプログラム

ここで紹介するプログラムは全くの入門用のものであることを, あらかじめお断りいたします。

「Visual C++」 + 「glut」でビルドするには『GLUT とプロジェクト』を参照のこと。
Step 1. OpenGL で窓を開くまで
単に, 窓を開いて, glut ライブラリで用意されている 立方体を表示するだけのもの。
Step 2. 座標軸を作る
glut ライブラリで用意されている円錐で 座標軸を作るだけのもの。glut には円柱が無いので最初に円柱を作る。
Step 3. 色をつける
最初のプログラムに書き込みをして、立方体に色をつける。 色をつけるには材質カラー (material color) のことを知る必要がある。
Step 4. 3D 関数グラフィックス
以上の準備の下に一葉双曲面面を表示するプログラムを作る。
Step 5. 透明にする
一葉双曲面を透明にするプログラムを作る。
4. glut で動画

OpenGL の補助ライブラリーの機能が制約されていますから 本格的に使用する場合には glut の方が便利です。 ここでは glut で動画をするための、非常に簡単なことを 紹介します。以下は

「glut」+「Visual C++」--窓を開くまで
からの変更に関しての説明です。順に読んでください。 とても簡単です。
  1. glut で動画 -- その 1
    (立方体を表示して、マウスをクリックする度に、立方体を 上下に移動するプログラム)
  2. glut で動画 -- その 2
    (「glut で動画 -- その 1」のプログラムに手を加え、 何もしていないときに、 立方体が y 軸のまわりに回転するようにしたプログラム)
  3. glut で動画 -- その 3
    (「glut で動画 -- その 1」のプログラムに手を加え、 矢印キーで立方体を回転するようにしたプログラム。)
  4. glut で動画 -- その 4
    (「glut で動画 -- その 2」のプログラムに手を加え、 ポップアップメニューを付けるプログラム。)
5. MFC
注意
以下は、かって Visual C++ に付属していた OpenGL のライブラリーを使用したものです。 Visual C++ 2008 になってからは、Visual C++ には OpenGL のライブラリーが付属しなくなりました。 しかし、glut + Visual C++ 2008 で次のように変更すれば、動くことが確認できました。(2009 年 12 月 24 日)
  1. ヘッダーは次のように変更
    #include <GL/gl.h>
    #include <GL/glu.h>        =========>     #include "glut.h";  
    #include <GL/glaux.h>
    
  2. 補助ライブラリーのオブジェクトを glut のものに変更、例えば
    ::auxWireSphere( 0.5f ); ====>  ::glutWireSphere( 0.5f, 20, 20);
    
Express 版では MFC がついていないので無理です。確認した動作環境は
  1. OS は Windows Xp
  2. Visual C++ 2008 Standard
なお、Visual C++ のユーザーインターフェースが変化しており、少し読み換える必要がある点があると思います。

Visual C++ の MFC (=Microsoft Foundation Class) を使用した OpenGL プログラミングの 方法は Visual C++ の「ヘルプ」/「検索」 で「OpenGL」を検索すると見つかる 次の英文の文書に記載されている。

  1. OpenGL I: Quick Start
  2. OpenGL II: Windows Palettes in RGBA Mode
  3. OpenGL III: Building an OpenGL C++ Class
  4. OpenGL IV: Color Index Mode
  5. OpenGL V: Translating Windows DIBs
  6. OpenGL VI:Rendering on DIBs with PFD DRAW_TO_BITMAP
  7. OpenGL VII: Scratching the Surface of Texture Mapping
  8. OpenGL VIII: wglUseFontOutlines

しかし、これらを直接参考にするよりは

R. Fosner, OpenGL, Programming for Windows 95 and Windows NT, Addison Wesley, ( ISBN 0-201-40709-4 )
(邦訳、ロン・フォスナー、OpenGL, Programming for Windows 95 and Windows NT (日本語版), アジソン ウェスレー ( ISBN 4-7952-9702-9 )

のほうが便利です。 そもそも、Windows での OpenGL は一般的には、 C 言語ライブラリの使用が前提です。そのため、C++ にする利点はあまりないが、 MFC を使用すれば 3 次元フォントなどが簡単に使用できるようになり、 試みてみる価値がある。そこで、ここでは上の Fosner の本をまねして、 実際にプログラムを記述してみることにする。(どれもこれも矢印キーで動くようにしてありますが、 最近のパソコンであれば、窓を全開にしてもストレスなく動きます。Windows Me 以後は OpenGL のスクリーンセーバが付いていますから当然といえば当然です。)

MFC を使用した OpenGL, その 1 (窓を開くまで)



MFC を使用した OpenGL, その 2 (3D フォント)



MFC を使用した OpenGL, その 3 (材質カラー)

6. その他

少し複雑なオブジェクトを OpenGL 単独で作るのは一般には かなり困難となります。その場合には modeler (あるいは modeller) と呼ばれる ソフトを使うのが普通です。次のページが参考になります。 (「Applications & Games」 の中の「Windows Applications」あるいは「Linux/UNIX Applications」を見る)

以上からリンクをたどれますが、

AC3D

はよく知られたモデラーの一つです。これは以前はシェアウェアーでしたが、 今では商用ソフトになっており、 現在では 14 日間しか自由に使用できません。 AC3D に関しては次のページで説明をしています。

AC3D

なお、このページで使用している AC3D はシェアウェアーの時代のもので、 現在のバージョンとは少し違っているかもしれません。シェアウェアの時代にも 正式版は有料で確か現在と同じ 50 ドルでした。とても魅力的だったのは サイトライセンスが 500 ドルだったことです。(この値段で何台のパソコンでも 使用することができました。) 今でも educational license があるようですから、 ひょっとするとまだ教育機関向けには安くしてもらえるかも しれません。(e メールで問い合わせないといけないようです)