[PR] | 2025.04.19 20:48 |
×
[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。
category : |
カレンダー
プロフィール
最新記事
(10/15)
(06/17)
(01/09)
(12/14)
(06/20) カテゴリー
|
XOPS関連サイト「みかん箱」の運営や、OpenXOPSの開発などを行う[-_-;](みかん)のブログ。近状報告や独り言などを書きます。
| |||||
PR
▲ 開始時に明らかに何かを間違えたブリーフィング画面を付けました。 上と下の文に、XOPSの独特フォントをひそかに使ってます。 (下記の本文とは関係なし) 2月下旬、DirectXの当たり判定の基礎根本を勉強するべく資料を探していた所、 以下のようなサイトを発見。 「泥巣」 http://claybird.sakura.ne.jp/ >FPSつくるよ! http://claybird.sakura.ne.jp/making/fps/ 早速、運営元のClaybirdさんに問い合わせ、DirectXの当たり判定について 相談に乗って頂けないか聞いたところ、あっさりOKしてくれました。 幸いにもClaybirdさんもXOPSをご存知だったので、話やすかったのはもちろんですが、 わざわざXOPSの当たり判定とブロックデータの概念について、研究してくださいました。 本当にありがとうございます。 とりあえず、分かった(教えて頂いた)事を出来るだけ多くここに記しておきます。 A、nine-twoさんが「ブロックデータ」の概念を取り入れた理由 1、当たり判定の単純化と高速化 当たり判定を行う際、マップ上の全オブジェクトと判定を行うと非効率なため、 詳細な判定の前に、各オブジェクトを包む境界ボックスを生成し、荒い判定を行う。 オブジェクトが小さく分割されていると、基本的に荒い判定で除外される部分が 増え、詳細な判定の回数を減らせる。 普通のXファイルのメッシュを使っていると、この「荒い判定」で除外できる部分が 少ないが、XOPSのブロックはそれぞれが独立したオブジェクトなので、 「荒い判定」の効率が良く、速度を稼げている。 2、表示が速い。 3、データの読み込みが速い。 (私は2・3については全く知りませんでした) 結論として、表現出来る形状を制限する代わりに処理速度を稼ぐといった 観点から、ブロックデータを採用した可能性が高い。 B、人とマップとの当たり判定の計算方法 ブロックは六面体で各面は平面だと仮定する。 (よって、面が少しでも歪めば計算から除外する) マップとの判定は、全部レイ(見えない光線)を使って判定する。 ここからは、教えて頂いた事を参考に自分なりに考えた方法を解説。 障害物/斜面を処理した後、重力計算で地面を求める。地面か壁かを実質区別する。 リアルタイムではなく、移動時にのみ計算する。 プレイヤーの前後左右の4方向に対してそれぞれレイを生成し、 接触時、物理のボールの跳ね返り(=反射)を応用して、壁に斜めに侵入した時の 横滑りを手動算出する。 以下のサイトの「3.座標軸に平行でないものに衝突した場合」を参考に3Dに応用。 http://www5f.biglobe.ne.jp/~kenmo/program/buturi5/buturi5.html 壁の計算を行ったあとに、重力を計算し地面を求めて移動する。 ・・・(自分の文が)日本語でおkな上に、Claybirdさんの方法とは全く異なる方法で計算です。 わざわざ教えて頂いたのに申し訳ないです。 C、人と人との当たり判定の計算方法 単純に垂直な円柱。 人とマップとの当たり判定の計算方法については、やっと自分で満足のできる 「仮」物が完成しました。 後日高速化・最適化に取り組みます。 最後に、Claybirdさんに感謝いたします。ありがとうございました。
COMMENTS
【本文以外は任意項目です】
順調に進んでいますね。 私も説明を読んで、詳しくはわかりませんが、だいたいのことは理解できました。やはりこの分野はすごく難しいですね。 がんばってください。もうこれしか言えません^^; from koala 応援を頂けるだけでも感謝いたします。
まったく順調ではないです(笑 この辺の話は、やはり正面向いて考えるのは難解です。 3Dが数学と物理の固まりであるというのを身にしみて実感してます。 from MASTER 2010.03.09 Tue 18:17
TRACKBACKS
URL:
※過去のブログ記事は 原則として編集・修正していません。 | ||||||
△ TOP |