2D ビューへの 3D オブジェクトの投影

Flash Player 10 以降、Adobe AIR 1.5 以降

flash.geom パッケージ内の PerspectiveProjection クラスは、3D 空間で表示オブジェクトを移動する場合に基本的な遠近法を適用する単純な方法を提供します。

3D 空間の遠近法投影を明示的に作成しない場合、3D エンジンでは、ルートに存在し、すべての子に伝播されるデフォルトの PerspectiveProjection オブジェクトが使用されます。

PerspectiveProjection オブジェクトが 3D 空間に表示される方法を定義する 3 つのプロパティは次のとおりです。

  • fieldOfView

  • projectionCenter

  • focalLength

fieldOfViewfocalLength は相互に依存しているので、一方の値を変更すると、もう一方の値が自動的に変更されます。

特定の fieldOfView に対する focalLength の計算に使用される式は次のとおりです。

focalLength = stageWidth/2 * (cos(fieldOfView/2) / sin(fieldOfView/2)

通常は、fieldOfView プロパティを明示的に変更します。

ビューのフィールド

PerspectiveProjection クラスの fieldOfView プロパティを操作することにより、3D 表示オブジェクトがユーザーに近付くほど大きく表示され、ユーザーから遠ざかるほど小さく表示されるようにすることができます。

fieldOfView プロパティでは、遠近法投影の強度を決定する 0 ~ 180 度の角度を指定します。値が大きいほど、z 軸に沿って移動する表示オブジェクトに適用される歪みが強くなります。低い fieldOfView 値では、拡大/縮小が非常にわずかになり、オブジェクトは空間内で若干後方に移動するように見えます。高い fieldOfView 値では、歪みが大きくなり、より大幅に移動したように見えます。最大値の 179.9999... 度を指定すると、極端な魚眼カメラレンズ効果が生成されます。fieldOfView の最大値は 179.9999...、最小値は 0.00001... です。0 および 180 は無効な値です。

投影の中心

projectionCenter プロパティは、遠近法投影の消失点を表します。このプロパティは、ステージの左上隅にあるデフォルトの登録ポイント(0,0)へのオフセットとして適用されます。

オブジェクトがユーザーから遠い方へ移動するように見える場合、そのオブジェクトは消失点に向かって傾斜し、最終的に消失します。無限の深さの穴を想像してください。穴を見下ろした場合、壁面のエッジは穴のはるか下方の消失点に収束します。

消失点がステージの中心にある場合、穴は中心のポイントに向かって消失します。projectionCenter プロパティのデフォルト値はステージの中心です。例えば、エレメントをステージの左に表示し、3D 領域を右に表示する場合は、projectionCenter をステージの右のポイントに設定して、そのポイントを 3D 表示領域の消失点にします。

焦点の長さ

focalLength プロパティは、視点の原点(0,0,0)と z 軸上の表示オブジェクトの位置との間の距離を表します。

長い焦点は望遠レンズと同様で、視野が狭く、オブジェクト間の距離が圧縮されます。短い焦点は広角レンズと同様で、歪みの多い広い視野が得られます。中程度の長さの焦点は、人間の目に見えるものとほぼ同じです。

通常、focalLength は、表示オブジェクトが移動するときの遠近法変換中に動的に再計算されますが、明示的に設定することもできます。

デフォルトの遠近法投影値

ルートに作成されるデフォルトの PerspectiveProjection オブジェクトは、次の値を持ちます。

  • fieldOfView:55

  • perspectiveCenter:stagewidth/2, stageHeight/2

  • focalLength:stageWidth/ 2 * ( cos(fieldOfView/2) / sin(fieldOfView/2) )

これらは、独自の PerspectiveProjection オブジェクトを作成しない場合に使用される値です。

projectionCenterfieldOfView を自身で変更する目的で、独自の PerspectiveProjection オブジェクトをインスタンス化することができます。この場合、新規に作成したオブジェクトのデフォルト値は、デフォルトのステージサイズである 500 × 500 に基づいて次のようになります。

  • fieldOfView:55

  • perspectiveCenter:250,250

  • focalLength:480.24554443359375