ページ 11

D3DXVec3TransformCoord関数などについて

Posted: 2011年8月14日(日) 11:09
by fulls
DirectX9を使ってプログラミングをしています。
タイトルのD3DXVec3TransformCoord関数なのですが、MSDNの説明では2つ目の引数に

[in] 処理の基になる D3DXVECTOR3 構造体へのポインタ。

と書いてあるのですが要するに何を入れればいいのですか?
行列をベクトルに変換する関数だと思うのですが行列を入力すればベクトルは出てくると思うのですが...
そう考えると引数として最低必要なのは行列だけな気がします。

分かる方教えてください。

MSDN-D3DXVec3TransformCoord
http://msdn.microsoft.com/ja-jp/library/cc372970.aspx

Re: D3DXVec3TransformCoord関数などについて

Posted: 2011年8月14日(日) 11:39
by softya(ソフト屋)
行列とベクトルは同じものではないので、行列からベクトルは求められません。
この関数は入力ベクトルをトランスフォームして、正規化したベクトルを得る関数です。[修正]失礼しました。間違っていた様なので修正です。

で、どんな入力ベクトルを与えるべきかはyucky001さんが知っているはずですよ。D3DXVec3TransformCoordを使って得たいベクトルはなんなのでしょうか?

Re: D3DXVec3TransformCoord関数などについて

Posted: 2011年8月14日(日) 17:09
by うしお
D3DXVec3TransformCoordは、3次元ベクトルに4x4の行列を掛け算する関数です。
なので入力ベクトル、出力ベクトル、行列の3つが必要なのです。

3要素のベクトルに4x4行列はかけられないので、D3DXVECTOR4(x,y,z,1)として掛け算を行います。
仮にD3DXVECTOR4(x,y,z,0)としてトラスフォームするD3DXVec3TransformNormalの場合は、行列の平行移動成分は無視されます。

また、この関数は正規化を行いません。注意が必要かと思います。
ベクトルを正規化したい場合は、D3DXVec3Normalizeを用いてください。

Re: D3DXVec3TransformCoord関数などについて

Posted: 2011年8月15日(月) 15:10
by fulls
softyaさん、うしおさん、ありがとうございます。
D3DXVec3TransformCoordは、3次元ベクトルに4x4の行列を掛け算する関数だったんですね。
2つ目の引数も分かりました。
ありがとうございました。