こんばんは。
件名の通りです。
例えば、X軸に30度回転した行列があるとします。
この行列から回転を消し(無くし?)、回転角度を0度にしたいと思っています。
ちなみに、今回は30度としましたが、実際には何度回転しているかわからないものとしてください。
ご回答よろしくお願いいたします。
DirectXにて、とある行列から回転を消す方法
Re: DirectXにて、とある行列から回転を消す方法
>例えば、X軸に30度回転した行列があるとします。
>この行列から回転を消し(無くし?)、回転角度を0度にしたいと思っています
"X軸に30度回転した行列"
”行列から回転を消し”
がなにか イメージしにくいので具体的な行列を提示してください。
(アフィン変換したものをアフィン変換前に状態に戻す(逆変換)したいということでしょうか。)
>この行列から回転を消し(無くし?)、回転角度を0度にしたいと思っています
"X軸に30度回転した行列"
”行列から回転を消し”
がなにか イメージしにくいので具体的な行列を提示してください。
(アフィン変換したものをアフィン変換前に状態に戻す(逆変換)したいということでしょうか。)
Re: DirectXにて、とある行列から回転を消す方法
自分ゲームを作っているというシチュエーションではないということでしょうか。
前の画像を保持して戻すことも出来ないのでしょうか。
前の画像を保持して戻すことも出来ないのでしょうか。
Re: DirectXにて、とある行列から回転を消す方法
行列は、
〇〇〇〇 ←モデルのX軸が向いているベクトル
〇〇〇〇 ←モデルのY軸が向いているベクトル
〇〇〇〇 ←モデルのZ軸が向いているベクトル
〇〇〇〇 ←モデルの座標
↑ ↑ ↑ ↑
ベベベ計
ククク算
トトト上
ルルル都
ののの合
X Y Z が
成成成良
分分分い
か
ら
な
ん
と
な
く
つ
い
て
る
こんな感じの成分で構成されています。
そして、モデルが回転していなくて、移動していない状態と言うのは、
単位行列と言う、
1000
0100
0010
0001
と言う行列で表されています。
これはつまり、
モデルのX軸ベクトルは完全にX方向を向いていて、
モデルのY軸ベクトルは完全にY方向を向いていて、
モデルのZ軸ベクトルは完全にZ方向を向いていて、
モデルの座標は(0,0,0)の原点に居ると言う状態です。
ですので、回転成分だけを消すには、行列の三行三列の部分までを単位行列にする事で実現出来ます。
この知識は様々な所で応用出来ますので、是非理解して下さい!
活用例:
常にモデルの向いている正面方向に移動をさせたい場合は、行列の三行目のベクトルを
座標に足し算してやればいい。
〇〇〇〇 ←モデルのX軸が向いているベクトル
〇〇〇〇 ←モデルのY軸が向いているベクトル
〇〇〇〇 ←モデルのZ軸が向いているベクトル
〇〇〇〇 ←モデルの座標
↑ ↑ ↑ ↑
ベベベ計
ククク算
トトト上
ルルル都
ののの合
X Y Z が
成成成良
分分分い
か
ら
な
ん
と
な
く
つ
い
て
る
こんな感じの成分で構成されています。
そして、モデルが回転していなくて、移動していない状態と言うのは、
単位行列と言う、
1000
0100
0010
0001
と言う行列で表されています。
これはつまり、
モデルのX軸ベクトルは完全にX方向を向いていて、
モデルのY軸ベクトルは完全にY方向を向いていて、
モデルのZ軸ベクトルは完全にZ方向を向いていて、
モデルの座標は(0,0,0)の原点に居ると言う状態です。
ですので、回転成分だけを消すには、行列の三行三列の部分までを単位行列にする事で実現出来ます。
この知識は様々な所で応用出来ますので、是非理解して下さい!
活用例:
常にモデルの向いている正面方向に移動をさせたい場合は、行列の三行目のベクトルを
座標に足し算してやればいい。
Re: DirectXにて、とある行列から回転を消す方法
回転させたくないのであれば無理に戻そうとせず、回転行列の反映自体を省けば良いだけなのではと思います。
計算後のアフィン変換行列を直接単位行列にしてしまうと、
計算過程によっては欠落する情報が出てくるので、上手い対応とは言えません。
計算後のアフィン変換行列を直接単位行列にしてしまうと、
計算過程によっては欠落する情報が出てくるので、上手い対応とは言えません。