スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

ウディタ/3Dダンジョンを表示するいくつかの方法

3Dっぽく見せる技術は難しいですね。
さっき自分のコモン見たら泣きたくなるぐらい分かりづらかったです。
もっといい方法はないものか、とちょっと考えてみました。

※けっこう長いエントリです

まず、今採っている方法。

・一点透視図法を元に、縦横比で計算する方法
1130_1.png 1130_2.png

まず消失点Oを決めて、画面端から消失点までの距離をL0として、
一番近い場所の壁ABをL1、BCをL2…として、それぞれの数値を
L1 = L0 * 定数
L2 = (L0 - L1) * 定数
L3 = (L0 - L1 - L2) * 定数



とする方法。
それぞれの点の位置を計算して、自由変形で配置していきます。


・利点
四則演算だけで求められる
L0や定数をいじるだけで天井の高さや距離感、視点の位置や方向(上下方向のみ)などが調整できる
計算が早い(たいした計算をしていない)

・欠点
横に離れた列が歪む(幅を狭くすれば回避可能)
斜めを描画できない(斜めを二点透視図法でやれば描画可能)


・立方体や壁の画像をあらかじめ用意する方法

ScreenShot_2012_1130_02_46_44.jpg
赤丸のような形の画像を、あらかじめ用意してやります。
そして、マップに合わせて拡大・縮小して配置するだけです。
これが一番簡単かと思われます。
初期Wizはこれのフレーム版ですね。

・利点
一つ目の方法と併用すれば、四則演算だけで可能
おそらく処理が一番軽い

・欠点
上下にも左右にも、斜めの描画ができない
扉、壁、オブジェクトなどを、方向ごとに用意するので枚数が増える


・空間座標を元にする方法
ScreenShot_2012_1130_02_02_47.png


それぞれの物体ごとにXYZ座標を入力して、その点が自分からどの角度に見えるかを計算する方法。
自分の視野を縦方向に何度、横方向に何度と決めて、それに添って描画位置を決めます。
ビリヤードのゲームはそういう方法を採っていました。
1フレームに200ミリ秒とかかかるんで、諦めて平面にしましたけど。
しょぼPCバンザイ。

・利点
計算時間を考慮しなければ、どんな複雑な物体でも描画できる
球体であれば、角度と距離(により計算した拡大率)だけで描画できる
回転、移動も自由

・欠点
描画する物体の形状にもよるが、計算時間がひどい
視界の端が歪む(魚眼レンズっぽくなる)


・その他、座標系を三つ使う方法
これはいくつかあります。
1130_1.png 1130_2.png

再び同じ図。
画面に描画するためには
・左右方向の角度
・上下方向の角度
・XZ平面上の距離
・XYZ空間上の距離
などのパラメータが考えられると思います。
このうちの二つぐらいを求めて使ってやれば、平面上に表示することができます。

例えば、B点を表したいなら
(左に45°,距離141)
(左に45°,上に30°)
(距離141,長さ100)
など。
それぞれ自分で定義を作って、それに添って描画してやります。

見える長さは距離に反比例、とかならまだいいんですが
立体角ステラジアンとか単位ベクトルとか内積外積なんかが出てくると泣きたくなります。


こういうのを考えなくて済むように、座標と視点の位置だけで描画してくれるのが
UnityとかOpenGLとかなんだと思います。(たぶん)
ポリゴンってやつですね。(たぶん)
で、座標をいちいち打たなくていいようにするのがモデリング。(たぶん)
こういう描画をしたいなら、ウディタではなくそっちに移行したほうが早いし応用も効くと思います。
行列とか三次元のベクトルとか、私にはさっぱりなんで厳しいですが。
このへんの数学は、ゲーム作る仕事をするなら必須なんでしょうね。
関連記事

Comment

Post a comment

非公開コメント

お知らせ

記事移行完了

記事をFC2からcatgames.16mb.comへ移行完了しました。

このサイトは更新されません。

カウンター

2012/09~

メールフォーム

名前:
メール:
件名:
本文:

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。