ページ 11

3DRPGマップの位置判定の仕方

Posted: 2011年11月30日(水) 10:43
by 史上最悪のデスペナ
図のようにマップを格子状に区切って自分の大まかな位置を取得したいと思っています。
例.png
例.png (8.55 KiB) 閲覧数: 2844 回
黒丸が自機、赤丸がMOB、青丸がNPCです。
視野サイズは格子と同じサイズとします。つまり、仮に格子11のちょうど真ん中にキャラがいた場合格子11内しか見えませんが、図のような場合は中心よりも若干格子16よりなので、格子12,15,16の一部が見えるという状況です。

今回の場合ですと、格子11内のMOB全部と格子12,15のMOBが視野内にあり、残りは見えません。
キャラが格子10に進むと徐々に格子11内のMOBは格子12よりのMOBから見えなくなり、逆に格子10のMOBやNPCが見えてくるはずです。

お聞きしたいのは
NPCやMOBを描画する際、見えない位置にいるのを描画しても意味ないので、格子番号を取得して周りの格子(図のような場合であれば格子6,7,8,10,12,14,15,16)を描画するようにしたいのですが
いい方法はないでしょうか?件名の通り3Dマップです。

Re: 3DRPGマップの位置判定の仕方

Posted: 2011年11月30日(水) 11:15
by softya(ソフト屋)
格子のバウンダリ(境界)・ボックスを作って、その4頂点のどれから座標が視野角内に入っているかで表示ON/OFFを決めたほうが良いでしょう。
バウンダリ(境界)・ボックスの座標と当たり判定すればキャラ達は、どの格子に属しているか知ることが出来ます。

Re: 3DRPGマップの位置判定の仕方

Posted: 2011年11月30日(水) 11:20
by 史上最悪のデスペナ
当たり判定を使わずに単純にやるのは無理でしたか・・・・・・

Re: 3DRPGマップの位置判定の仕方

Posted: 2011年11月30日(水) 11:23
by softya(ソフト屋)
単純に格子状に地形モデルも含めて区切れるのであれば、100で割るとか単純な計算で出来ますよ。

Re: 3DRPGマップの位置判定の仕方

Posted: 2011年11月30日(水) 11:26
by beatle
第一歩としては、座標と格子番号の対応表を用意することでしょうか。
3Dマップということなので、高さ方向にも格子があるのか、それとも3Dマップだけれども平面的にしか
格子分割されていないのかわかりませんが、ここでは3次元座標系を仮定します。2次元座標系でも同じ考えでいけます。

まず単純な方法としては、x,y,zに対応する3次元配列を用意し、各要素へ格子番号を格納していく方法があります。
grid_indices[z][y][x] = 格子番号
のように、すべての配列要素に格子番号を割り振っておきます。
そして、自機が(x0,y0,z0)にいるときに描画する際には、
grid_indices[x0-1][y0-1][z0-1]~grid_indices[x0+1][y0+1][z0+1]
で格子番号を取得し、その格子を描画すればいいでしょう。

次に3次元配列を使わず、格子座標から格子番号を求めるやり方もあるでしょう。
格子番号の振り方が規則的なら、計算で格子座標から格子番号を求められるはずです。

Re: 3DRPGマップの位置判定の仕方

Posted: 2011年11月30日(水) 11:41
by 史上最悪のデスペナ
平面的にしか格子分割しないつもりでした。

beatleさんの方法でやってみようと思います。
分からなくなったら softya(ソフト屋)さんのバウンダリ・ボックスの方法に切り替えるかもしれませんが・・・・・・

Re: 3DRPGマップの位置判定の仕方

Posted: 2011年11月30日(水) 12:22
by non
おおまかな格子状って、本当に必要なのですか?
マップのスクロールのためなら必要かもしれないけど、視野範囲のためなら、いらないのでは?
だって、ちょうど中心じゃない場合は隣接した部分も描画するんでしょ。
問題は視野範囲を地形効果がない場合に自機からの距離で円(or球)で考えるか、四角で考えるかではないのですか?