座標系とカメラワーク
< 前へ [ トップへ ] 次へ >

 ここでは、ズームインやズームアウト、加えて遠近感を調整するためのテクニックなど、カメラワークに関する事項について解説します。
 RINEARN-X 3D におけるカメラワークの基本ポイントは、カメラ距離と拡大倍率の2つです。この2つを変更した影響は、概ね現実のカメラにおけるものと同じです。被写体から離れて望遠に(拡大)すれば遠近感は弱くなり、被写体に近づいて広角に(縮小)すれば遠近感が強調されます。この特徴を上手く利用して、利用目的に合ったカメラワークを設定しましょう。


 ズームインとズームアウト

・遠近効果
 現実の世界では、近くにある物ほど大きく、遠くにある物ほど小さく見えますね。この現象を一般に遠近効果(または消失効果)などと呼びます。この遠近効果の原因は、私たちの目の仕組みが凸レンズを用いている事に由来します。画像を凸レンズを通して写像すると、遠くの物ほど小さく写るのです。カメラなども凸レンズを用いているので遠近効果が生じます。
 3Dコンピュータグラフィックスの世界では、凸レンズと同様の写像計算をプログラム処理で再現することで、目やカメラで見た映像のように遠近効果を生じさせています。


・ズームインとズームアウト
 RINEARN-X 3Dにおけるズームインとズームアウトの制御は、基本的にはこの消失効果を利用します。つまりズームインしたい場合にはワールド座標系をスクリーン座標系原点に近づけ、逆にズームアウトでは遠ざけます。
 座標系を移動させずに、画面に表示される映像をそのまま拡大・縮小する事もできます。このように映像の表示倍率を設定するには、ScreenSystem3DEGクラスの setMagnification メソッドを使用します。引数には表示倍率をdouble値で指定します。なお、デフォルトでは 1.0 に設定されています。

setMagnification( double 表示倍率 )

 ただし、この方法で映像をかなり縮小すると、画面の端に近い部分に歪みが発生します。これは、角度的な広がりを持つ、本来は球面的であるはずの映像を、平面的なディスプレイに表示する事による歪みです。
 これは3Dコンピュータグラフィックスに限った話では無く、一般的な光学機器でも発生します。例えば一眼レフカメラにおいて、フィルムサイズに対応していないレンズを使用した場合にも、周辺部に歪みが発生する事があります。
 この歪みは基本的に常に発生しているのですが、映像の中心ではあまり目立たず、中心から離れるほどに目立ってくるという特徴があります。従って被写体を小さく映したい際に、被写体を遠ざけずに、表示倍率だけをあまり小さくすると、歪みの目立つ部位が画面の端に写ってしまうのです。


 相対的な遠近感

・望遠レンズでは遠近感が生じにくい
 カーレース中継や、マラソン中継などで、遠近効果があまり生じていない映像を目にした経験は無いでしょうか。遠くの車と近くの車が殆ど同じ大きさで映っていたり、同様に遠くの人と近くの人が殆ど同じ大きさで映っている映像です。このように遠近効果が少なくなる現象は、遠くの被写体を望遠レンズで拡大している場合に発生します。
 この現象を、大きさの等しい2つのボールを用いて説明しましょう。
 まず目の前1メートルの位置にあるボールと、同じく2メートルの位置にあるボールを比べると、当然ながら大きさがかなり異なって見えるでしょう。しかし、11メートルの位置にあるボールと、12メートルの位置にあるボールではどうでしょうか。恐らく、大きさはほとんど変わらないように見えるでしょう。このように、両ボール間の距離は等しく1メートルでも、目からの距離によって、目にうつる大きさの相対的な違いは全く異なります。
 さて、目から11メートルと12メートルの位置にあるボールを見たときの映像を、そのまま引き伸ばして拡大するとどうなるでしょう。大きくなった分、2つのボールが近くにあるように見え、さらに遠近効果のほとんど生じていない映像ができます。そしてこれが、遠くの被写体を望遠レンズで撮影した際に、遠近効果がほとんど生じなくなる理由なのです。

・相対的な遠近感の調整
 RINEARN-X 3Dでは、上で述べた原理をそのまま用いて、相対的な遠近感を自由に調整することができます。
 例えば学術的なグラフの表現などのように遠近感を極力排除したい場合は、ワールド座標系をスクリーン座標系原点から非常に遠くに配置し、そして表示倍率を高めれば、画面上の大きさを変えないまま遠近感を排除することができます。
 また逆に、建築物モデルの表示などのように遠近感を大きく効かせたい場合は、ワールド座標系をスクリーン座標系原点に近づけて配置し、そして表示倍率を下げてやれば、画面上の大きさを変えないまま遠近感を強めることができます。



 遠近クリッピングの設定

・遠近クリッピング
 消失効果では、近くの物ほど大きく表示されます。しかしそれでは、非常に近くにある物があまりに大きくなり過ぎて、画面の邪魔になる場合があります。そのような場合は遠近クリッピングを設定すれば、ある限界値よりも近くにある立体を表示されなくなって便利です。また同様に、ほとんど見えなくなるほど遠くにあるものを表示させないように設定することも可能です。

・近さの限界値の設定
 近さの表示限界値は、ScreenSystem3DEGクラスの setNearClipping メソッドで指定できます。引数には近さの限界値をdouble値で指定します。

setNearClipping( double 近さの限界値 );

・遠さの限界値の設定
 遠さの表示限界値は、ScreenSystem3DEGクラスの setFarClipping メソッドで指定できます。引数には遠さの限界値をdouble値で指定します。

setFarClipping( double 遠さの限界値 );



 上下左右クリッピングの設定

・上下左右クリッピング
 遠近クリッピングとは異なるクリッピングとして、上下クリッピングと左右クリッピングがあります。これは一般には視角と呼ばれる事もあります。このクリッピングの目的は、画面に映らない位置にある立体に関して描画処理などを行わないようにし、負荷を低減させることです。RINEARN 3Dでは、視角の代わりに、画面中心からのピクセル数で指定します。

・上下限界値の設定
 上下の表示限界値は、ScreenSystem3DEGクラスの setUDClipping メソッドで指定できます。引数には画面中心からの上下の表示限界値を int 値で指定します。

setUDClipping( int 上限界値, int 下限界値 );

・左右限界値の設定
 左右の表示限界値は、ScreenSystem3DEGクラスの setLRClipping メソッドで指定できます。引数には画面中心からの上下の表示限界値を int 値で指定します。

setLRClipping( int 左限界値, int 右限界値 );



 画面中心位置の設定

 画面中心位置とは、画面のどこにスクリーン座標系の原点を対応させるかという設定項目です。通常は画面中央に自動設定されますが、意図的に設定値を変更することもできます。それにはScreenSystem3DEGクラスの setScreenCenter メソッドを使用します。引数には画面上のX座標とY座標を int 値で指定します。

setScreenCenter( int 中心X座標, int 中心Y座標 );
< 前へ [ トップへ ] 次へ >