bate's blog

調べたこと実装したことなどを取りとめもなく書きます。

XMVectorSet

XMVECTOR Face = XMVectorSet( 0.f, -1.f, 0.f, 0.f );

実行するとFaceの中身が(x,y,z,w)=(0.f, 0.f -1.f, 0.f)になる。
なぜ???

ベクトルa=(ax, ay, az)をベクトルb=(bx, by, bz)に変換する行列を求めるようなことが必要になった。
手順としては
1:ベクトルa, bの成す角thetaを求める
2:ベクトルa, bの成す平面に垂直なベクトルnを求める
3:ベクトルnを軸にthetaだけ回転するクォータニオンを求める
4:それを行列に変換する
みたいなことでよいのかしら。

2つのベクトルa, bの角度を求める方法は、内積を求めてからacosで求めれば良いと思う。
垂直なベクトルnはa, bの外積で求まる。
任意の軸周りに回転するクォータニオンはぐぐれば出てくる

XMVectorSetの挙動が飲み込めなくて実際の挙動が不安。