【初心者歓迎】スレを立てる前にココで質問を【Part6】

このエントリーをはてなブックマークに追加
166名前は開発中のものです。
3D空間でマウスでクリックした位置までキャラを歩かせたいのですが、
どうすれば良いのでしょうか。
地面とキャラはXファイルを読み込んでいます。
マウスのスクリーン座標をD3DXVec3Unprojectで3D空間の座標に変換できたのですが
その後どうすればよいのか・・・。
D3DXIntersectを使えばできそうな気もするのですが、法線ベクトルの求め方がわかりません。
ご教授お願いします。
167名前は開発中のものです。:04/09/26 20:34:20 ID:2rkN/1z8
ストラテジゲームの汎用エンジンって何かあったりする?
ノベルゲーで言うNScripter/吉里吉里みたいな感じのヤツ

AOK TCみたいなのをお手軽に作れないかなとか思っているんだけど…
168名前は開発中のものです。:04/09/26 21:07:17 ID:CP2HiYJ8
ウィンドウズ標準コントロールの見た目のカスタマイズって
出来ないんでしょうか?
169名前は開発中のものです。:04/09/26 22:10:25 ID:0AOZmZ8k
>>166
画面座標系 → 正規透視座標系 → カメラ座標系 → ワールド座標系
と逆変換を行う
この時使用される行列は、元行列の逆行列を使用する必要がある

ここにサンプルがあるので見てみたら?
http://www.c3.club.kyutech.ac.jp/~sukiyaki/3dt/mouse.html
170名前は開発中のものです。:04/09/26 22:13:54 ID:NuSguSMv
>166
そんなの簡単だよ。
XYZの各距離から、直線の距離を求めて、それをってやればいいじゃん。
それとも、簡単にやってれるライブラリ関数でも聞いてるの?
171名前は開発中のものです。:04/09/26 22:23:00 ID:mXGi7kId
>>168
オーナードローで検索汁
172166:04/09/26 23:49:40 ID:kQXnHxjr
>>169,170
ありがとうございます。
画面座標からワールド座標への変換はできていたのですが、その後がわかりませんでした。
169のリンク先を見て解決することが来ました。

D3DVIEWPORT9 vp;
m_lpD3ddev->GetViewport(&vp);
D3DXVECTOR3 pos = D3DXVECTOR3(m_MousePos.x, m_MousePos.y, 1.0f);
D3DXVec3Unproject(&pos, &pos, &vp, &matProj, &matView, &matWorld);
BOOL hit;
float dis;
D3DXIntersect(m_pMesh, &vecEyePt, &(pos - vecEyePt), &hit, NULL, NULL, NULL, &dis, NULL, NULL);
if (hit) pos = vecEyePt + (pos - vecEyePt) * dis;