自機は球として壁、床のモデルとの判定を取りたいのですが、
自機の移動べクトルが次フレームで壁や床の線と当たっているかをとればいいのは分かっているのですが、
モデルの頂点データと結線データからどう取り出せばいいのか分かりません。
よろしければ教えていただけないでしょうか?
環境はDirectX9を使用しています。
3Dモデルの判定について
Re: 3Dモデルの判定について
何を取り出したいのでしょうか.FE さんが書きました: モデルの頂点データと結線データからどう取り出せばいいのか分かりません。
Re: 3Dモデルの判定について
球体であれば、
---------------------------------------------------------------------
【A】球の中心から壁までの距離が、球の半径以下
【B】球の中心から壁までの距離が、球の半径より長い
---------------------------------------------------------------------
【A】であれば接触、【B】であれば接触していない、
という判定でよいかと思われます。
---------------------------------------------------------------------
【A】球の中心から壁までの距離が、球の半径以下
【B】球の中心から壁までの距離が、球の半径より長い
---------------------------------------------------------------------
【A】であれば接触、【B】であれば接触していない、
という判定でよいかと思われます。
Re: 3Dモデルの判定について
壁はそもそも平面なのでしょうか?また、面の情報とは壁の平面の方程式などでよいのでしょうか?
上が両方共イエスの場合、conioさんのおっしゃっているように、
接触しているかどうか知りたい壁と球の中心の距離を調べることでその壁に当たっているか、が分かります。
(この方法がダメだというのは、壁の情報が予め与えられているわけではないのでしょうか?何にせよ、情報が少なすぎるような気がします)
上が両方共イエスの場合、conioさんのおっしゃっているように、
接触しているかどうか知りたい壁と球の中心の距離を調べることでその壁に当たっているか、が分かります。
(この方法がダメだというのは、壁の情報が予め与えられているわけではないのでしょうか?何にせよ、情報が少なすぎるような気がします)
Re: 3Dモデルの判定について
なんと言ったらいいのかわかりませんが、両方とも3Dモデルでの話です。
球の進行ベクトルが壁モデルに刺さった時当たったということは分かります←理論上
球の毎進行ベクトルは取れるのですが壁モデル(頂点座標やら結線情報から面を取り出す?)に当たったという判定の取り方が分からないのです。
接触した面を取り出す操作?
モデル自体から当たっている面を取り出す。というプログラムが分からない感じです。
下手な説明ですみません。
壁モデルは平面でも固形でもどちらでもできるようにしたいのです。←どちらと言えば固形。
球の進行ベクトルが壁モデルに刺さった時当たったということは分かります←理論上
球の毎進行ベクトルは取れるのですが壁モデル(頂点座標やら結線情報から面を取り出す?)に当たったという判定の取り方が分からないのです。
接触した面を取り出す操作?
モデル自体から当たっている面を取り出す。というプログラムが分からない感じです。
下手な説明ですみません。
壁モデルは平面でも固形でもどちらでもできるようにしたいのです。←どちらと言えば固形。
Re: 3Dモデルの判定について
球の進行ベクトルからだけでは壁の情報は得られませんよね?
できることは、
球の情報+壁の情報→当たっているならこの壁の情報を取り出す
という操作だけだと思います
壁の情報(各頂点の座標等)がもともとないという状況では、そもそも壁を構築することができませんが…?
あと、平面でも固形でも、とありますが固形とは何でしょうか?
私が訊いているのは平面なのか曲面なのか、曲面であるとしても球の大きさから考えて平面と近似してもよい状況なのかどうか、です
できることは、
球の情報+壁の情報→当たっているならこの壁の情報を取り出す
という操作だけだと思います
壁の情報(各頂点の座標等)がもともとないという状況では、そもそも壁を構築することができませんが…?
あと、平面でも固形でも、とありますが固形とは何でしょうか?
私が訊いているのは平面なのか曲面なのか、曲面であるとしても球の大きさから考えて平面と近似してもよい状況なのかどうか、です
Re: 3Dモデルの判定について
壁については別途モデルを読み込んだ前提の話です。
固形というのは3Dモデルのことで、曲面か平面かは3角形ポリゴンを取り出せれば全て平面なので問題ないです。
球の進行ベクトルが壁モデルのどこの3角形ポリゴンが交わったかを取り出したいのです。
固形というのは3Dモデルのことで、曲面か平面かは3角形ポリゴンを取り出せれば全て平面なので問題ないです。
球の進行ベクトルが壁モデルのどこの3角形ポリゴンが交わったかを取り出したいのです。
Re: 3Dモデルの判定について
やりたいこと:壁情報(3角形の集合)と線分を与え,その線分と交わっている3角形を取得する
ということですね.
これをやるには,すべての3角形の中から,線分と交わる3角形を探せばいいでしょう.
ちなみに,DXライブラリには
HitCheck_Line_Triangle
という関数があり,1つの線分と1つの3角形が交わるかどうかを判定できます.
これをすべての3角形に対して適用すればいいことになります.
(DXライブラリを使っていないなら,同じような判定関数を自作しなければならないでしょう.
もしかしたらDirect Xに含まれているかもしれませんが僕は詳しくありません)
ということですね.
これをやるには,すべての3角形の中から,線分と交わる3角形を探せばいいでしょう.
ちなみに,DXライブラリには
HitCheck_Line_Triangle
という関数があり,1つの線分と1つの3角形が交わるかどうかを判定できます.
これをすべての3角形に対して適用すればいいことになります.
(DXライブラリを使っていないなら,同じような判定関数を自作しなければならないでしょう.
もしかしたらDirect Xに含まれているかもしれませんが僕は詳しくありません)
Re: 3Dモデルの判定について
DirectX 9を使っているなら、D3DX9のD3DXIntersect系関数が質問者さんが欲しい機能そのものなのでは?
それなりに重いので、複雑なモデルなら当たり判定用に簡易なメッシュを作る必要があります。
それなりに重いので、複雑なモデルなら当たり判定用に簡易なメッシュを作る必要があります。