[3D]
Direct3Dその2 / 2009-01-10 (土)
クリックして矩形に当たる場合は色が変わるようになりましたっ
カメラ位置から見える範囲の先までを直線で結び、その直線と三角形の交点を求めるという方法なのですが。
D3DXMatrixInverse
D3DXVec3TransformCoord
D3DXVec3TransformNormal
D3DXVec3Normalize
D3DXIntersectTri
これらのAPIで求めることができるようです。
向きベクトルや座標の変換等まだ理解できていない点が多々あります。
この辺は完全に数学の世界なので少しずつ理解を深めていきたいところ。
今回はサンプルコードを探して参考にしました。ロシア語のサイトだったので解説はさぱーりでしたが…
次はグリッドを表示して、クリックしたところに床を置いたり消したりしたいなと思います。
サンプルコード
[3D]
Direct3Dその1 / 2009-01-03 (土)
3か月ほど前にチャレンジしたもののうまくいかなかったので放置していたのですが、
年明けパワーにあやかろうとがんばってみました。
いずれは箱庭マップエディタ的なことをやってみたいので、その手始めに地面を配置するところから。
座標を指定して矩形を描画させようとあれこれ調べつつ…
矩形といっても3角形を2つ並べるイメージなのですね。
左手前、左奥、右手前、右奥の順番に頂点を設定して描画すると矩形になりました。
この順番が間違っていたようで、有効な3角形にならずに表示されなかったようです。
m_pD3DDevice->SetTransform (D3DTS_VIEW, &matTmp);
で、カメラがどこにあって、どこを見ているのを設定する。
m_pD3DDevice->SetTransform (D3DTS_PROJECTION, &matTmp);
で、どの範囲を3Dから2Dに変換して画面に見せるかの設定。
m_pD3DDevice->SetTransform (D3DTS_WORLD, &matTmp);
で各オブジェクトを全体のサイズに合わせて拡大・縮小させるわけですね。
このサイズのイメージがわかなかったのですが、空間全体や床の1パーツ等どこか基準となるサイズを用意してあげることで、
それと比較してどのくらいかがわかるわけですね。
2Dは左上が(0,0)で右下が(1023,767)などわかりやすかったので理解するまで時間がかかりました。
次はクリックした時の矩形との当たり判定にチャンジしようと思います。
サンプルコード