1人でゲームが作れるように修行します。2 (487レス)
上
下
前
次
1-
新
116
(8)
: 2010/10/10(日)07:27
ID:iMXoTcjW(1)
AA×
[240|
320
|
480
|
600
|
100%
|
JPG
|
べ
|
レス栞
|
レス消
]
116: [sage] 2010/10/10(日) 07:27:55 ID:iMXoTcjW 一般的な方法としては、 ・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次元座標に戻せる。 うろ覚えで書いているので細かい間違いがあるかも知れないが(違ってたら乞指摘)、 ゆっくりでいいんで、参考にしてもらえれば嬉しい。 頑張れ! http://mevius.5ch.net/test/read.cgi/gamedev/1272901469/116
一般的な方法としては 視点座標つまりカメラの位置をあらわす位置ベクトル 投影面における視点からマウスカーソルまでの半直線ベクトル から仮想空間内の任意の物体との交差判定交差位置特定がきる は普通プログラム上で管理されている は視野錘台を自分で管理されているなら容易に計算できるが 投影変換行列の逆行列を使っても計算できると思うそういう便利な関数があるかもしれない 投影変換行列の逆行列 マウスの座標正規化装置座標系同次座標表現 特にフィールドのような単一平面との交点計算は 原点フィールド面上にあること フィールドの法線ベクトル正規化ベクトル に対してがフィールドの表面にあると限定した場合 との内積が0以上の場合交差しないマウスカーソルは天空を指している さもなければ フィールド面からまでの高さとの内積 から との内積 を求めれば目的とするフィールド上の点は のような手順で計算できるはず あとはをフィールドの座標軸で分解すれば2次元座標に戻せる うろ覚えで書いているので細かい間違いがあるかも知れないが違ってたら乞指摘 ゆっくりでいいんで参考にしてもらえれば嬉しい 頑張れ!
上
下
前
次
1-
新
書
関
写
板
覧
索
設
栞
歴
あと 371 レスあります
スレ情報
赤レス抽出
画像レス抽出
歴の未読スレ
AAサムネイル
ぬこの手
ぬこTOP
0.041s