~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~  OpenGL 入門講座    「三次元グラフィックスの基礎とOpenGL関数の全体像を掴む」 第1-1回 「3D-CG基礎、ポリゴン表示、ワイヤー表示」用のプログラム ----- 入門講座用プログラムのコンパイル ----- ‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾ ■ はじめに:  三次元グラフィックスの世界へようこそ!!  昨今、コンピュータの急速な発展に伴って、その利用範囲を広げている三  次元グラフィックスの世界に、皆様をご招待いたします。ここでは、特に  OpenGL という業界標準のグラフィックス・ライブラリィを用いたプログ  ラミング方法について、できるかぎり分かりやすく説明を行う予定です。  ところで、三次元グラフィックスとは、どのようなものを指すのでしょう  か?最近では、TV CM や、映画、ゲームの世界で頻繁に使われるように  なったので、ご存じの方も多いことと思います。映画では、「トイ・スト  ーリー」、「マスク」、「ジュラシック・パーク」といったものが、三次  元グラフィックスを用いた代表的な作品です。国産映画では、ちょっと古  くなりますが、「ゴルゴ13」*1があります。ゲームでは、「バーチャ・ファ  イター」がその代表でしょう。このような三次元グラフックスは、二次元  グラフィックスで用いた、ドロウやペイントといった手法とは、全く異な  る手法で作られているのです。三次元グラフィックスが、二次元グラフィッ  クスと大きく異なる点は、正確なパース画像が描画できることと、照明計  算が簡単に行えること、さらに、視点を簡単に変えることができるという  ことでしょうか。これらは、コンピュータが、計算によって行うため、  人間がいろいろと考える必要はありません。人間は、ただ、物体の形、  色、光源の位置、視点の位置などをコンピュータに、データとして与えて  やればいいのです。*2  このような、三次元グラフィックスの複雑な計算方法には、いろいろな  方法があります。スキャン・ライン法や、デプス・バッファ法(Z バッ  ファ法)、視線探索法(レイ・トレーシング法)*3、ラジオシティ法などで  す。三次元グラフィックスを作成するには、これらの手法を用いて計算す  るわけですが、これらのプログラムを作成することは、大変なことです。  しかし、心配することはありません。これらのアルゴリズムを用いたグラ  フィックス・ライブラリィを使用すれば、簡単に三次元グラフィックスを  作ることができるのです。  このグラフィックス・ライブラリィの代表が、OpenGL なのです。 ■ OpenGL とは:  OpenGL は、デプス・バッファ法による三次元グラフィックス・ライブラリィ  です。(二次元グラフィックスも可能)  この手法の特徴としては、高速な描画が可能であることと、ハードウェア  化が比較的簡単であることです。このため、三次元グラフィックスの計算  をハードウェアで行うもののほとんどが、デプス・バッファ法を用いてい  ます。  ただし、この手法では、照明計算は間接光を考慮しておらず、直接光のみ  の計算となっています。そのため、フォトリアリステックな画像を生成す  ることは、残念ながら困難です。  とは言え、OpenGL には、ステンシル・バッファやアキュムレーション・バッ  ファといったバッファがあり、これらをうまく利用することで、より複雑  な画像を作り出すことができるようになっています。  頑張れば、「トイ・ストーリー」や「ジュラシック・パーク」のようなCG  を作ることも夢ではないかもしれません。 (実際、ジュラシック・パークは、最終レンダリングではありませんが、 Open Inventor を使っていた筈です。) ■ とにかくコンパイル:  難しい話は、これぐらいにして、実際に OpenGL に触れてみましょう。 (1) プログラムの入手  まずは、プログラムを入手しなければなりません。 http://www.asahi-net.or.jp/‾yw3t-trns/index.htm に入門講座用のプログラムを用意しましたので、WWW ブラウザを使って入 手してください。  (2) ファイルの解凍  program1_1.tgz は、tar + gzip されていますので、次の手順で解凍して  ください。(gzip が必要ですので、予め用意しておいてください。) $ mv program1_1.tgz program1_1.tar.gz $ gzip -d program1_1.tar.gz $ tar xvf program1_1.tar (3) ファイルの変換 当方の手違いにより不都合が生じています。アーカイブされたテキスト・ ファイルは、DOS 形式のものになっていました。そのため、行末に不必要な ^Mが入っています。適当なツールで、DOS形式のファイルをUNIX形式のファ イルに変換して下さい。どうもご迷惑をおかけします。 ■ コンパイルする上での注意事項: ・環境に合わせて Makefile を修正する必要があります。 □ インクルード・ファイルのディレクトリの追加・変更が必要です。 □ ライブラリィ・ファイルのディレクトリの追加・変更が必要です。 ・プログラムは、Mesa 用であるため、SGI でコンパイルする場合には、 一部修正する必要があります。    □ ヘッダー名の変更が必要です。(SGI)   (例) #include "glaux.h" --> #include "aux.h"    □ ライブラリィ名の変更が必要です。(SGI)   (例) -lMesaGLU --> -lGLU ・AUX ライブラリィは、最新のものを入手してください。SGI マシンに 付いてくるものでは、不都合が生じることがあります。 「OpenGL プログラミング・ガイドブック」の付録CD-ROMのものか、そ れ以降のものを利用してください。   入門講座では、AUX ライブラリィを積極的には使用しない予定です。   しかし、簡単なプログラムを作るのに AUX ライブラリィは、便利なの   も事実です。そのため、講座の最初の数回は AUX ライブラリィも使用   することになります。 ・ワーニングには、気にしないことにして、コンパイルしてください。   注意) 今後は、SGI 用の Makefile などを用意したいと思っています。     ■ プログラムの実行: ・コマンドラインから引数なしで実行してください。 $ program1_1 Window が開き、立方体が表示されましたか? ■ プログラムの説明: ・256色でもフルカラーでも動作します。 ・X, Y, Z 軸をそれぞれ、赤、青、緑色で表示します。   ・1つの頂点を原点とする、立方体を表示します。   X 軸に垂直な面は赤色。Y 軸、Z 軸に垂直な面は、それぞれ青、緑色   で表示します。 ・マウスの左ボタンを押すと、視点が上がり、右ボタンを押すと視点が  下がります。 ■ 用語解説: ○ スキャンライン法 スキャンライン単位で、物体の前後判定を行う隠面消去法。 ○ デプス・バッファ法 奥行き情報を保存するデプス・バッファを用いた高速な隠面消去法。 ○ 視線探索法(レイ・トレーシング法)   映り込みや屈折といった間接光の計算と、影の計算ができる手法。   隠面消去法のひとつ。 ○ ラジオシティ法   間接光の計算(厳密には、拡散拡散反射)を行う手法。面光源を用いる   ことが多いため、ソフトエッジの影の表現も可能。 ○ 隠面消去   視点の方向に向いている面によって隠される面を削除して、実際に見   える面だけを取り出すこと。面の前後判定を行わなければならないた   め、計算コストがかかる。 ○ 直接光 光源から直接照射される光。 ○ 間接光 光源から直接照射される光ではなく、他の物体に反射した光。 ○ フルカラー   R,G,B 各8bit。計24bitで表現できる約1,600万色のこと。 ○ フォトリアリステックな画像   写真のように現実的な画像のこと。3D-CG が目指すひとつの方向。 ■ 注釈:  *1) 「ゴルゴ13」   あえて、紹介しました。(^^;) *2) 実際には、そんなに簡単ではありません。ここでは、便宜上そういう   表現にしました。本当は、形状データを用意するのには、大変な労力   を必要とします。 *3) ここでは、あえて視線探索法という名前にしました。 ■ 次回予告:  第1-2回では、今回コンパイルしたプログラムの説明を行う予定です。 ‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾ -- 寺西 忠勝