ページ 11

ワールド行列の計算が怪しいので

Posted: 2013年9月10日(火) 00:09
by atori
最近階層アニメーションを取得しようとしています。

もうすぐ出来そうなのですが、なんだかワールド変換行列に関する知識があやふやなままやっていたなと実感したので、
質問させていただきます。

各オブジェクトには、ワールド行列があります。これはわかります。
あるオブジェクトがあったとします。

そのオブジェクトはワールドに配置されるので、ワールド変換行列Wを持っています。
回転や移動もしたいので、回転用行列(Rx,Ry,Rz)と、平行移動行列Tも必要になります。
今は拡縮は考えません。

で、ワールド変換行列を求める式は、
W1=Rx*Ry*Rz*T
になるんですよね?(回転、移動は計算済み)

このW1をDirectXで言うならば、SetTransform()に渡してやればよいのでしょうか?

それとも、さっきの式を少し変えて、
W2=(Rx*Ry*Rz*T)*W
(あるいはW3=W*(Rx*Ry*Rz*T))
をSetTransform()に渡すのでしょうか?

W2はワールドを原点とした変換、括弧内のW3は自分のオブジェクト(ローカル)を原点とした変換になるんですよね?(逆か?)

なんだかこのあたりがかなりごちゃごちゃになっていて混乱しています。

最終的に3Dキャラを普通のゲームのように動かしたいのですが・・・
SetTransform()に渡す行列はW1~W3のどれになるのでしょうか?


初歩的な質問で申し訳ないのですが、よろしくお願いします。

Re: ワールド行列の計算が怪しいので

Posted: 2013年9月10日(火) 11:34
by usao
オフトピック
>SetTransform()に渡す行列はW1~W3のどれになるのでしょうか?
DirectX関連の話の内容はわかりませんが
候補が3つしかないなら,実際にその関数に渡してみて,結果を確認すれば一目瞭然だったりしないのでしょうか?

Re: ワールド行列の計算が怪しいので

Posted: 2013年9月11日(水) 00:38
by atori
その通りです。ただ、確認したかっただけなのです。

このトピックは解決とさせていただきます。