まで分かりやすくあえて遠近法といってましたが、正確には遠近法はただ遠くにあるものが小さく見えるだけ、

って定義らしいので、厳密な式にするのはできないそうです。


上の文は嘘です。


さて遠近法の式をつくりましょうか。


まず、近いほど大きく、遠いほど小さく見えるといいますが、どのくらいがわからなければいけません。


図に描いて見れば分かりますが、これは奥行き(z座標)の距離に反比例して大きく見えます。


だから、画面の中心を320,240とすれば

例えば40,50,90という空間の点は、2D画面では

320+k*40/90 240+k*50/90 っていう点で表されます。(kは係数)


ここでkは大体500とか、そのくらいの数になるはずです。


では地下鉄でGOの柱のプログラムを公開しましょう。多分理解できるはずです。

(ちなみに左右にあるあの茶色っぽい細長いのが柱です・・・一応・・・)


color 3573450/q7.cnt+19,3573450/q7.cnt+19,3573450/q7.cnt+19
boxf 192+(8000000/q7.cnt),170-(5100000/q7.cnt),191+(7300000/q7.cnt),170+(5100000/q7.cnt)
boxf 188-(8000000/q7.cnt),170-(5100000/q7.cnt),188-(7300000/q7.cnt),170+(5100000/q7.cnt)

ほい。

カラー指定は、奥なほど濃くってことでしょう。

q7.cntは自分とその柱までの距離が代入された変数です。

cntはループのなかでしか意味をなさない、今何週ループ目?が代入されているシステム変数です。


柱はいくつもあるので、この3行の命令は20回ループで読ませています。


画面の中心はなぜか190,170みたいですね。

そして (8000000/q7.cnt) ここの部分


割り算を使っているの分かりますか?

q7.cntは奥行きの距離でしたよね?

また、8000000や5100000とかものすごい数になっているのは、kに1000倍されたx座標を掛けたからです。


精度のところで説明したように、全部の距離が1000倍にされて計算されています。

小数も扱える変数だったらこんな事しないんですけどね



今日の名言はー


「びゃあ゛ぁ゛゛ぁうまひぃ゛ぃぃ゛ぃ゛(訳:ああ、うまい)」 by M・H