1人でゲームが作れるように修行します。2 (487レス)
前次1-
抽出解除 必死チェッカー(本家) (べ) 自ID レス栞 あぼーん

139
(1): SGGK ◆6pZCoAtaxk [sage] 2011/01/17(月) 23:51:17 ID:Px2vRAS2(1) AAS
>>115
115(2): SGGK ◆6pZCoAtaxk [sage] 2010/10/10(日) 00:13:14 ID:U9No5w8c(1) AAS
今日は進捗なし…orz
毎日何か進捗のある状態に持っていくことの難しさを痛感。
とりあえず次にやろうとしているのは、マウスでフィールド上の一点を指定できるようにすること。
今まで書いてた2D平面版ではマウスカーソルの位置に選手が向かうようにしていたので同じ操作方法を使えるようにしたいのが理由。
2D版では、ゲーム画面(640X480)の左上角の座標がゲームのフィールド全体の座標でみたとき(WX、WY)という座標で、
マウスカーソルの画面での座標が(X、Y)としたとき、マウスカーソルのフィールド上での座標値は(WX+X、WY+Y)になる。
3Dでもこれに相当する処理をしたいけど、3Dになるとカメラの位置が立体的に変化するからどうすればよいか想像が付かない。
このスレで教わった用語からいもづる的に出てきた用語を駆使して、
「ビュー座標からワールド座標を算出」というそのままなキーワードで検索してみたらたくさん出てきた。
どうすれば出来るのかある程度調べたら、使えそうなライブラリ関数を探す予定。
ライブラリで出来なければ、何も出来ない自分なので…orz ←まぁ、これはあまり気にしないでこれからも行き詰まるまで頑張るつもり。
で言った
>とりあえず次にやろうとしているのは、マウスでフィールド上の一点を指定できるようにすること。
については、どうやら出来そうな感じ。

それを表す図やテストプログラムの実行ファイルをUPしようかと思ったけど、
テストプログラムでは、試したいDXライブラリの関数をメインループにそのまま書き込んだだけなので、
今までのクラスを使ったやり方に比べ単純な例で試して上手くいったと自分が思っているだけなのかもしれないので、
今度は、今までの2Dで動かしていたプログラムの中身を少しずつ3Dのライブラリ関数に置き換えて
動作を確認していき、これでうまくいくようならUPする予定。

フィールド上の一点を指定する方法については、
>>116
116(8): 名前は開発中のものです。 [sage] 2010/10/10(日) 07:27:55 ID:iMXoTcjW(1) AAS
一般的な方法としては、
・E=視点座標、つまりカメラの位置をあらわす位置ベクトル
・L=投影面における視点からマウスカーソルまでの半直線ベクトル
から、仮想空間内の任意の物体との交差判定、交差位置特定がきる。

Eは、普通、プログラム上で管理されている。

Lは、FOV(視野錘台)を自分で管理されているなら容易に計算できるが、
投影変換行列の逆行列を使っても計算できると思う(そういう便利な関数があるかもしれない)。
L = Mproj.inv x (mouseX,mouseY,1)T
  Mprij.inv = 投影変換行列の逆行列
 (mouseX,mouseY,1) = マウスの座標(正規化装置座標系、同次座標表現)

特に、フィールドのような単一平面との交点計算は、
・O=原点(フィールド面上にあること)
・N=フィールドの法線ベクトル(正規化ベクトル)
に対して、Eがフィールドの表面にあると限定した場合、
LとNの内積が0以上の場合、交差しない(マウスカーソルは天空を指している)

さもなければ、
・h= フィールド面からEまでの高さ((E-O)とNの内積)
から、
・t= -h/(LとNの内積)
を求めれば、目的とするフィールド上の点Fは、
・F= E+L*t
のような手順で計算できるはず。

あとは、(F-O)をフィールドの座標軸(X-O)(Y-O)で分解すれば、2次元座標に戻せる。

うろ覚えで書いているので細かい間違いがあるかも知れないが(違ってたら乞指摘)、
ゆっくりでいいんで、参考にしてもらえれば嬉しい。
頑張れ! 
氏の7行目の投影変換行列の逆行列を使う方法では、
自分の力不足のため投影変換行列を作れないので断念。
座標変換、結構勉強してみたつもりだけど、さすがに投影変換行列を作るのは無理だった。
ライブラリを作れる人はすごいと思った。
>>119
119(5): 名前は開発中のものです。 [sage] 2010/10/31(日) 14:36:58 ID:Ha18eay7(1) AAS
ConvScreenPosToWorldPosのサンプル内でMV1CollCheck_Lineを使って
ポリゴン上のマウス座標を出してるっぽいのがあるよ
氏のConvScreenPosToWorldPosのサンプル内を使う案については、可能であることを>>120で確認済。
>>124氏の案についても昨日テストプログラムで試した結果、可能であることがわかった。

これでやっと>>65に取り掛かる直前の状況になってきた感じ。(感謝!)
もしうっかりスルーしてしまった項目があった場合、指摘あれば対応します。
前次1-
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル

ぬこの手 ぬこTOP 0.017s