ホームに戻る
 視点と視野

図00_00:X方向:赤 Y方向:緑 Z方向:青 矢印の方向が + でZ方向は手前が + です

ソースコード:glut00_view.c
 解説

視点

視点は常に (0, 0, 0) の位置にあります。
視点の方向は (0, 0, -1) を向いています。
視点の位置や方向は変えることはできません。
よって視点を右に動かしたいときは、
視点ではなく世界のほうを左に動かす必要があります。

視野(射影空間)

物体を見る方法には正射影と投射射影の2つがあります。
正射影は平面から平面を見ます。
よって、視野は遠くに行っても広がりません。
投射射影は点から平面を見ます。
よって、遠くのものは遠くにいくほど小さく見えます。
視野を決めるには視点から、
手前に幅と高さを指定したスクリーンを距離を指定して置き、
同じく視点から有効な遠さも指定して、
そこまでを投影することになります。
方法はまずディフォルトの GL_MODELVIEW モードから、
射影変換の GL_PROJECTION モードに切り替えます。

glMatrixMode(GL_PROJECTION);

正射影であれば glOrtho で、投射射影は glFrustum として、
それぞれ表示可能な空間を設定します。

例えば、

glFrustum(-1.33, 1.33, -1.0, 1.0, 1.0, 5.0);

で投射射影空間を設定した場合、
左端まで 1.33、右端まで 1.33、下端まで 1.0、上端まで 1.0、
のサイズのスクリーン(すなわち横幅 2.66、縦幅 2.0)を、
視点から 1.0 の距離に置き、
視点から 5.0 の距離まで見えるように設定します。
よって、視点から距離 5.0 の位置では、
横幅 13.3、縦幅 10.0 の範囲まで見えることになります。

視野(モデル空間)

モデル変換は表示する物体の位置変換です。
モデル変換は GL_MODELVIEW モード で行います。

glMatrixMode(GL_MODELVIEW);

視点の変更はできませんので、
この空間を拡大縮小、回転、移動して仮想的に視点を操作します。

視野(ポートビュー)

ポートビューは実際に表示される部分の2次元の範囲のことです。
例えばウインドウの横幅を2倍にしポートビューが横に伸びると、
ポートビューが広げられても射影空間はそのままなので、
表示画面は横に2倍に引き伸ばされたように見えます。
もしこういった引き伸ばしが起こらないようにするには、
ポートビューにあわせて射影空間を引き伸ばしする必要があります。

実際には、

モデル変換→射影変換→ポートビュー変換

という順で処理が進みます。

inserted by FC2 system