JSLで透視投影のシーンを構築するには、Perspectiveコマンドを表示に送ります。
Perspective (angle, near, far)
上の図に示しているように、angleは視角、nearは近い平面までの距離、farは遠い平面までの距離です。表示領域を定義するときは、次の2つのことに留意する必要があります。
• 近い(near)平面より前方、または遠い(far)平面より後方にある要素のように、表示領域の外にある要素は描画されません。それらの要素は表示されません。
• nearに対するfarの比は小さくする必要があります。小さい方が、レンダリングエンジンが各要素をシミュレートする時、他の要素の「手前」に描くべき要素を効率よく判定するからです。near引数の値はゼロより大きくなければなりません。
「Hello World」を描くスクリプトには、次の行が含まれています。
scene << Perspective( 45, 3, 7 ); // カメラを定義する
これは、視角が45度、近い平面までの距離は3単位、遠い平面までの距離は7単位であることを定義しています。
視角は、カメラの広角レンズまたは望遠レンズと同じ働きをします。視角が小さければ図が拡大され、大きければ縮小されます。つまり、視角が小さければ、小さい大きさのシーンに3次元空間が写されるので、シーンのなかの要素が大きく見えます。視角が大きければ、大きな大きさのシーンに3次元空間が写されるので、シーンのなかの要素が小さく見えます。したがって、シーンにおける要素の大きさは、Perspective関数のangle引数を使って操作できます。次の図は、角度を45度と90度に設定した透視投影による「hello world」スクリプトの例です。
図13.6 投影法の変更
Perspectiveコマンドの代わりに、Frustumコマンドで視野の四角錐台を定義することもできます。
Frustum(left, right, bottom, top, near, far);
四角錘台における近い方の平面の左下隅と右上隅の(x, y, z)座標が、(left, bottom, near)と(right, top, near)で定義されます。nearには近いクリップ平面までの距離を、farには遠いクリップ平面までの距離を指定します。