2D簡易カメラの実装

これまで、1画面の中で完結するようなゲームを主に制作してきた。
ゲームの中には、広大なマップの中の1画面分を切り抜いて表示し、キャラクタの動きに合わせて、画面を切り替えて描画するタイプのゲームも数多くある。
キャラクターや、ステージの進行に合わせて、マップやフィールドの表示を切り替えていく技法の事である。
スーパーマリオや、アトランチスの謎や、マグマックスなどを想像してもらえば、イメージがつかめると思う。

Fig. 1: 画面スクロールと表示のイメージ

スマホの画面を想像してみてほしい、ワールド座標が実世界である。
ワールド座標(実世界の)位置をスマホ内のカメラのある位置に映し出して表示している。
そのまま、スマホを移動させるとカメラに映る映像が滑らかに移動する。
この状態を、画像とプログラムを使って作り出す感じであるよ。

ワールド座標

ワールド座標は、すべてのもとになる実世界の座標である。
座標の計算はすべてこの座標をもとに行う(っていうか、本来ここにしか物体は存在しないはずよね)。
ワールド座標は、原点の取り方で様々な表現があるが、2Dの場合は基本的にx軸y軸の数学座標と変わりないもんである。

Fig. 2: 原点の違う座標系

スクリーン座標

スクリーン座標は、ワールド表をカメラで移して実際に画面に映し出されるときの座標系である。

world2screen
Fig. 3: ワールド座標系とスクリーン座標系とゲーム画面

近年のゲームは、2D、3Dにかかわらずゲームの中の出来事はすべてワールド座標で計算し(当然画面に映らないところで事が起こっている可能性もある)
表示したい領域だけどカメラで映して、表示するという仕組みになっている。
今回は、簡単な2Dカメラもどきを作って画面スクロールに挑戦してみようというお題である。
2Dの場合のスクリーン座標とワールド座標の変換は簡単で、カメラの回転拡大縮小が入らなければ、変換の際の足し算引き算が変わるだけである。
(カメラが回転するときは、ちょっと変わってくるから注意が必要)

  • game-engineer/classes/2023/game-programing-1/second-term/11/11-09-24.txt
  • 最終更新: 2年前
  • by root