スポンサーサイト

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

当たり判定(昨日の続き)

昨日の続きを見ていたら

b -= a;
c -= a;
s1 -= a;//ここと
s2 -= a;//ここが!

a = Vector3.Zero;

を書くのを忘れていたのであった。
線分の開始点と終点も移動させないとね。。。

いろんなサイトみて回ってるとfloatの精度で0と比較とかしてるけど、実際の値って0.000016fとかになるよね。
大丈夫なのだろうかと思ってしまう。

結局
p-a = s(b-a)+t(c-a)
の計算があまりにも自信がないので外積のほうに分岐を入れて使う事にした。
辺の延長だったら長さで比較するって分岐。

でもごちゃごちゃしていて重そう。

そんな時ひらめいた!!

事前計算で変換行列作っておいて3dを2dにしておけばいいんじゃない?って。

早速やってみたら意外と簡単。
ゲーム作りだしてから色々お勉強してて報われた瞬間でした。

△abcを
aは原点
bはX軸上
cはXZ平面状

に強制的に持ってくる変換行列をパイプラインで読み込む時にコリジョンマップ情報に書き込んじゃうわけだ
もちろん変換後の必要な座標も書き込む

んでもって当たり判定に使う線分などの座標に動的に行列を適用。

事前に計算しておいた座標を計算に使える+ほぼ2次元計算なのでそもそも計算量が少ない

とってもお得って寸法ってわけです。
これまたブログを書いていて
あ~クォータニオンにしとけばよかった・・・
と気付いて先ほど作り直し。

んで完成。
試したらいい感じに動いた。わーい。

ソース載せようとコピペしたら
MathHelper.ToRadians(90)
とかラジアンに直してない汚いままだったのでやめた

気をつけるとしたらクォータニオンの順で
回転合成するとき
q3 * q2 * q1

q1回転→q2回転→q3回転
になるってことくらい

混乱しそうなら
Quaternion.Concatenate(q1,q2)
使っておけばOK

ねよっと。

コメントの投稿

非公開コメント

プロフィール

あしゅ

Author:あしゅ
ぷぃぷぃ日常。
いつのまにか雑記ブログに。

カテゴリ
最新記事
検索フォーム
最新コメント
リンク
このブログをリンクに追加する
ブロとも申請フォーム

この人とブロともになる

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