忘れっぽいのは素敵なことです~そうじゃありませんか~
空しいテストの数ばかり飽和の量より増えたなら忘れるよりほかないじゃありませんか~ (傾斜 中島みゆき)
何回目でしょーかテストの点を忘れた回数・・・
いえいえ、こっちの話です。
今回は擬似3D描写のお話。
一応、プログラムを知らない人も読んでくださってるかもしれないので2D描写のことから話し始めたいと思います。
まずスクリーンに画像を貼り付ける場合、必ずスクリーン上のポジションを数値で指定して、貼り付けます。
pos という命令ですが、例えばpos 100,200と指定した場合、このあと来る画像貼り付け命令で貼り付ける画像が、スクリーンの左から数えて100ピクセル、上から数えて200ピクセルの位置に表示されます。
一応2Dはこうやって表示位置の設定をしているのですが、3Dの場合ではpos 100,200,300とz座標が加わったり根本的にまったく違う方法で座標指定している・・・・・・・なんてことはないんです。
画面に奥行きはないし画面自体はxとy座標しか存在しません。
機械(パソコンの画面)にとってはx、y座標が知りたいわけで、z座標なんか言われてもチンプンカンプンなのです。
だからわざわざ私たちが遠近法の計算式で、3次元を2次元で見た場合x、y座標がどうなるか計算してz座標を消してあげないといけないわけですね。
つまり結局は3Dも、2Dと(概念としては)同じプロセスで画像を貼り付けているのです。
プログラム経験者の方はアレと思ったかもしれません。
確かに、3Dプログラミングの場合普通x座標y座標z座標の3つの座標を指定しないと表示できませんし、というか指定してくださいってマニュアルに書いてあるし。
でもそれはプラグインのほうであなたが指定したxyz座標をxy座標に勝手に変換して、最終的に画面に表示しているのです。
プラグインを作った人が、スクリプターに開発しやすいようにと、わざわざちゃんとxyzの3つを指定できるような命令を作っておいてくれていた、という訳ですね。
(例外として光源を計算する方法もありますがこれは処理時間が膨大に膨れ上がるためCGやムービーにしか使われないそうです。)
で、ここからが本題。
今(次)から解説する擬似3Dとは、そこまで高度な3Dを求めていないプログラマーが、そのためにプラグインを使うのが面倒だといって、自分で遠近法の式を作って3Dを再現しちゃうことをいいます。
シューティングの背景とか、ゲーム自体は2Dだけど雲と地面みたいに背景が2重スクロールになってあたかも奥行きがあるように見せるような場合に頻繁に使われます。
でそのためには第一に、遠近法の式を自分で考えて作らないといけませんが、まそれは次回。
次回:技術解説「地下鉄でGO!」その5 擬似3Dをプログラムする
ところで、とあるブログで名言集みたいなことやり始めたみたいです。毎回誰かの名言を最後に載せるのですが、なんか面白いなーと、言うか急にうらやましくなったんでこっちも真似してやってみようかと思います!
さて、最初の名言はー・・
「そのうち、一家に一台の時代が来るかもしれん!」by N・I