今まで分かりやすくあえて遠近法といってましたが、正確には遠近法はただ遠くにあるものが小さく見えるだけ、
って定義らしいので、厳密な式にするのはできないそうです。
上の文は嘘です。
さて遠近法の式をつくりましょうか。
まず、近いほど大きく、遠いほど小さく見えるといいますが、どのくらいがわからなければいけません。
図に描いて見れば分かりますが、これは奥行き(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








