3Dダンジョン描画アルゴリズム 考 

まあ、プログラミングの話なのですが。割と本気で考えてました。

・3Dダンジョン描画アルゴリズム
やたら長いので、結局格納。
しかも人には解りにくい自信がある…orz

追記使えないので表に返信。
ニコライさん
 元の弾幕みたいに炎が残るように作ったらえらい大変でしたw
 静止画で見ると急激に戻ってますけど、動画だと綺麗に見えます。マジック。



言葉より図を使った方が良いと思うので、まず図。
default_2-3.PNG
3Dダンジョンというのはこんな感じだと思います。
んで、諸々すっ飛ばして本題。
どうやったらこういうマップが描けるか。
それは、この赤丸で囲った「壁と床、天井の継ぎ目」が解れば全て解決します。
壁、天井、床1枚につき、4つの点を使うのは自明です。(この場合四角形だから)
この4点に合わせて壁を描画すれば良いのです。
幸い、DXライブラリにはその関数があるので、台形変形そのものを計算しなくて済みます。
(マトリクスとか使わなくて済む)

そして、奥のものから描画していけば、破綻しません。
わかりにくいけどこんな感じ。(大分設計ミス)
default_3.PNG
数字の大きいものから描いていきます。
奥に壁があっても、手前に壁があれば、
それで上書きされて見えなくなる(視線が通らなくなる)という寸法です。

ここまではそんなに難しくないのですが、
問題は移動する時。
例えば、前進したら?
瞬間移動なら悩むことはありません。
壁の有無は変わっても継ぎ目の点は移動する前と全く同じ位置でしょう。
しかし、移動してる過程を表示したかったら…?
…継ぎ目の点が、動きます。
前進に合わせて、奥のものが手前に来ます。
まあ、それでもその軌跡はax+bの一次関数で表せる単純なものです。

ここから最大の問題。例えば、右を向いたら?
どこに継ぎ目の点が来るのでしょうか?
そもそも、どの壁が見えるのでしょうか?
これを数式で表さなくてはいけません。
それには視野の考えが必要になると思います。
視野のどこに点が入るか逆算するのです。
真上から見て、視野が回るとして、
例えば、斜め45°を向いている時はこうなる。
ray-trace.PNG
継ぎ目の点は視野の中のどこにあるかを計算するのです。
で、計算された4点に合わせて壁を描画する。と。
頭痛くなってきた…。
レイトレーシングの応用ですが、なかなか大変です。
絶対座標と相対座標がわかってないと混乱すること請け合い。

面倒だったらずるをしましょう。
式を組むのが面倒だったら、実際紙に書いて測ってしまえば良い。
回転は15°おきとか。30°おきとか。
前進後退は移動してる途中の絵を予め作っておいてしまうとか。
細かいほど滑らかになります。

数学できれば、一発でわかるんでしょうけどね。
もっと勉強しておくんだったか…。
実際のゲーム(メガテン。SFC?)では左右振り向き、
どういう処理をしていたのか気になります。
web拍手 by FC2

コメントの投稿

Please, write a comment in Japanese(or use web translator).














管理者にだけ表示を許可する

トラックバック

この記事のトラックバックURL
http://gridnote.blog62.fc2.com/tb.php/174-e50f3978