2002年度 OpenGL勉強会 脚注
- 現在のコンピュータグラフィクス技術には,大きく2つに分類される.一つはリアルタイム性を重視したレンダリング,もう一つは映像の質を重視したレンダリングである.ここで勉強するのは前者で,リアルタイムCGと呼ばれることもある.後者はレイトレーシングなど.
- ハイエンドのものは,家一件買えるぐらい.ただし,5年前のハイエンドマシンは,今日の格安マシンより性能的に劣ることもある.SGIのOnyxはその最高峰に君臨するマシン(だった?).
- ちなみにSGIの3Dグラフィック技術者らは,99年秋,nVidia社に移籍している.
- auxiliaryの略.
- レンズ系では広角のことをワイド,狭角(望遠)のことをテレ,ということもある.
- パースペクティブ.日常ではパースと略されている.
- ワイヤーフレームモデルでも隠線消去をおこなう特殊な場合がある.
- デプスバッファはzバッファ(z-buffer)とも呼ばれる.これは視線方向がz軸正方向であることに由来する.
- 「行列」と聞いただけで頭が痛くなる人もいそうなので,数学的な定義は初歩的なものを除いて割愛した.
- スタック(stack):積み重ね,山.コンピュータ用語では,最後に入れたデータが最初に取り出されるようなデータ構造を指す.FILO(First In Last Out).スタックにデータを入れることをプッシュ(push),スタックからデータを取り出すことをポップ(pop)という.
ちなみに最初に入れたデータが最初に取り出されるデータ構造をキュー(queue)と呼ぶ.
- glPushMatrix()とglPopMatrix()の対応が取れていなくてもコンパイラはエラーを出さないので,間違えると発見が困難である.OpenGLのプログラムに熟練してくると,この関数を多用することになるため,なおさら注意が必要である.ここでは明示的にかぎ括弧で対応をとるようにしている.
-
glPushMatrix()とglPopMatrix()は,より複雑なモデルを作成する際に応用できる.例えば車を描画する場合には,まずワールド座標系より車のボディ座標系に変換する.この座標変換は車の移動を意味する.次にボディの座標系でシャーシやタイヤなどを描画する.タイヤが4本とも同じ形状をしているなら,タイヤ描画関数を用意しておくのが楽.タイヤを描画するには,ボディの座標系からタイヤの座標系に変換し,タイヤ描画関数を4回コールする.タイヤの位置は4種類ありますが,glPushMatrix()とglPopMatrix()を駆使すると次のような手順になる.
1.ワールドから車の座標変換(移動)
2.ボディの描画
glPushMatrix();
3.タイヤ1への座標変換
4.タイヤの描画
glPopMatrix();
glPushMatrix();
3.タイヤ2への座標変換
4.タイヤの描画
glPopMatrix();
glPushMatrix();
3.タイヤ3への座標変換
4.タイヤの描画
glPopMatrix();
glPushMatrix();
3.タイヤ4への座標変換
4.タイヤの描画
glPopMatrix();
- 慣れてきたらgluLookAt関数を使わずに,座標変換操作のみで視点の移動をやるのが望ましい.「視点を動かすこと」とは,「モデルを反対方向に動かすこと」と同じ効果がある.このことから容易に想像できると思う.
- ダブルバッファとは,名前の通りフレームバッファを2つ用意する表示モードのこと.2つのバッファを描画,表示に切り替えながら使うことにより,滑らかな動きの映像を生成することができる.どれほど効果があるかはお試しあれ.GLUT_DOUBLEがダブルバッファ,GLUT_SINGLEがシングルバッファ.
- VRの研究における大目標は,この対話操作に五感を駆使し計算機と人間との相互作用を豊かなものにすること...
-
対話的でない映像が「ムービー」である.
-
慣れないうちはgluLookAtを使うのが吉.ポヒマスとか扱うようになると,この関数がいかに無力かがわかる.
-
モデルは誰?
-
本節の内容はOpenGLに依存した内容のため,本節の講義資料には具体的なソースを記述することにした.
-
三角関数や指数関数の演算は,計算機が苦手(計算時間が遅い)とする処理の一つである.
-
これは知っていないと気づかない.
-
IPアドレスに対し,MACアドレスとはネットワークカード固有に割り当てられているものである.カード毎に割り当てられたMACアドレスは,世界唯一の識別番号である.