###前提・実現したいこと
初めまして、プログラム初心者です。説明が下手だと思いますが回答お願いします。
C言語(Visual Stadio2015)で3Dゲームを作っているのですがプレイヤーがマップとの当たり判定でとても困っています。
現在D3DXIntersectを使ってプレイヤーの進行方向にレイを飛ばして判定を作っているのですが、レイを1本だけ飛ばして判定を取っているため複数のマップの面に対してプレイヤーがぶつかってしまうとすり抜けてしまいます。
なのでプレイヤーの進行方向から左右45度傾けた方にもレイを飛ばしたいのですが、上手くいきません。
調べてみたらそれらしきサイトがあったので試して見たのですがそれも上手くいきませんでした。
たぶん自分の計算が間違っているのですが、何処が間違っているのかが分かりません。
説明が下手ですがよろしくお願いします。
###発生している問題・エラーメッセージ
レイを1本だけではなくプレイヤーの進行方向から左右45度傾けた方にもレイを飛ばしたいが上手くいかない。
###該当のソースコード
//playerReyがプレイヤーの正面から飛ばしているレイ(D3DXVECTOR3で宣言しています) //D3DX_PI は円周率 D3DXVECTOR3 reftRey= D3DXVECTOR3(playerRey.x*cos(45 * D3DX_PI / 180), playerRey.y, playerRey.z*sin(45 * D3DX_PI / 180)); D3DXVECTOR3 rightRey= D3DXVECTOR3(playerRey.x*cos(45 * D3DX_PI / 180), playerRey.y, playerRey.z*sin(45 * D3DX_PI / 180)); //壁での判定(fDistanceが指定値以下であれば) if (Collide(g_things[PLAYER_1P].vPosition , playerRey, &g_models[MAP_1], &fDistance, &vNormal, &g_things[MAP_1]) && fDistance <= 2.0f|| Collide(g_things[PLAYER_1P].vPosition, reftRey, &g_models[MAP_1], &fDistance, &vNormal, &g_things[MAP_1]) && fDistance <= 2.0f Collide(g_things[PLAYER_1P].vPosition, rightRey, &g_models[MAP_1], &fDistance, &vNormal, &g_things[MAP_1]) && fDistance <= 4.0f) { //プレイヤーの座標を移動させない myvec = CalcWallScratchVector(myvec, vNormal); }
###試したこと
以下2つのサイトを参考にさせて頂いたのですが何かと上手くいきません。
http://takabosoft.com/19991213144957.html
http://www5d.biglobe.ne.jp/~noocyte/Programming/Geometry/RotationDirection.html
###補足情報(言語/FW/ツール等のバージョンなど)
C言語
Visual Stadio2015
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/12/26 10:03
2016/12/26 11:00
退会済みユーザー
2016/12/26 14:11