3D-2D変換
1. はじめに
この記事では,3D座標を2D座標に変換し,3D空間上の物体を2D画面上に描画する事を目的とする.
2. 2次元座標(スクリーン)とスクリーン前方の3次元座標との位置関係
まず,3次元座標を2次元座標に変換するために,表示する2次元座標であるスクリーンとスクリーン前方の3次元座標との位置関係について考える. 図1に,スクリーンと3次元座標の位置関係を示した座標を示す.
図1にある焦点とはプレイヤーの目の事であり,ここから3次元空間を眺めた時にうつる視界を,スクリーンとして2次元画面上に描画する. この図にあるように,3次元空間上の点は,スクリーン上の点に映る. したがって,これらの位置関係から以下の比の関係が導かれる.ここで,焦点の座標は点である.
また,座標についても同様に考えると,
ここで,プレイヤーの視点である焦点の座標を座標と座標の原点であると考えると,
であるから,式と式は,
となる.
また,計算を簡易にするために,焦点からスクリーンまでの距離とする(すなわち,自分の視点から1.0だけ 前の座標が画面上に映し出される.)と,式と式は,
と表される.
図2に,この時の位置関係を示す.
以上により,スクリーン上の座標と3次元座標との位置関係が示された.
3. スクリーン上の座標と描画する画面の座標との位置関係
これまでに,スクリーン上の座標と3次元座標との位置関係を示した. 次に,スクリーン上の座標を実際に描画する画面上に映す事を考える.
描画する画面の横幅を,縦幅をとする.
また,実際に描画する画面上の軸,軸上の任意の座標を,とし, 今まで考えて来たスクリーン上の座標は同様に,と表すとする.
そして,焦点の軸に関する視野角を,軸に関する視野角をとすると, 原点を実際に描画する画面の中心として, 実際に描画する画面上の横幅の半分,縦幅の半分に対応するスクリーン上の座標は,
,と表される.
したがって,
が成り立つ.
式と式をそれぞれ,について解くと,
となる.
4. 回転時の座標
次に,プレイヤーが回転した時に,スクリーンに映し出される画面について考える. プレイヤーがY軸を中心に回るということは, 動かないプレイヤーのY軸を中心に周囲の物体が回っていると考える事が出来る. 実際に周囲の物体の座標を移動するのではなく,物体を描画する上でそのように考える. 回転行列を用いて(2)計算を行うと
Y軸を回転後のx座標を,z座標をとすると,
X軸を回転する場合は,
5. まとめ
3次元空間にある座標を2次元平面に描画する流れをまとめると,
- 回転時の3次元座標を計算(項目4)
- 3次元座標をスクリーン上に見える座標に変換(項目2)
- スクリーン上の座標を,実際に描画する画面内の座標に変換(項目3)
となる.
参考文献:
1.AS3.0 で 3D プログラミングを1から勉強する (3) - 透視投影 - てっく煮ブログ
2.回転行列