ページ 1 / 1
DirectXにて、とある行列から回転を消す方法
Posted: 2017年9月23日(土) 18:12
by tomtomさん
こんばんは。
件名の通りです。
例えば、X軸に30度回転した行列があるとします。
この行列から回転を消し(無くし?)、回転角度を0度にしたいと思っています。
ちなみに、今回は30度としましたが、実際には何度回転しているかわからないものとしてください。
ご回答よろしくお願いいたします。
Re: DirectXにて、とある行列から回転を消す方法
Posted: 2017年9月23日(土) 20:49
by Math
>例えば、X軸に30度回転した行列があるとします。
>この行列から回転を消し(無くし?)、回転角度を0度にしたいと思っています
"X軸に30度回転した行列"
”行列から回転を消し”
がなにか イメージしにくいので具体的な行列を提示してください。
(アフィン変換したものをアフィン変換前に状態に戻す(逆変換)したいということでしょうか。)
Re:
Posted: 2017年9月23日(土) 21:05
by tomtomさん
Mathさん
コードで表しますと、
コード:
D3DXMATRIX mRot;
D3DXMatrixRotationX(&mRot, D3DXToRadian(30));
この、mRotの回転を潰すということです。
30度逆に回転させれば当然回転はなくなりますが、回転角度が不明なため、それが出来ないのです
Re: DirectXにて、とある行列から回転を消す方法
Posted: 2017年9月23日(土) 21:25
by Math
自分ゲームを作っているというシチュエーションではないということでしょうか。
前の画像を保持して戻すことも出来ないのでしょうか。
Re:
Posted: 2017年9月23日(土) 21:45
by tomtomさん
>>前の画像を保持して戻すことも出来ないのでしょうか。
そうですね、出来るほど簡単な状況ではないです。
例は極端に簡単に説明しましたけど。
ちなみに画像とは・・・?
それはそうと、自己解決しました。
._11など、行列の中身をいじることで回転を潰すことが出来ました。
多少強引ではありますが、しばらくはこれでいってみます。
今後弊害が出ればまた考えたいと思います。
Re: DirectXにて、とある行列から回転を消す方法
Posted: 2017年9月24日(日) 15:24
by manntera
行列は、
〇〇〇〇 ←モデルのX軸が向いているベクトル
〇〇〇〇 ←モデルのY軸が向いているベクトル
〇〇〇〇 ←モデルのZ軸が向いているベクトル
〇〇〇〇 ←モデルの座標
↑ ↑ ↑ ↑
ベベベ計
ククク算
トトト上
ルルル都
ののの合
X Y Z が
成成成良
分分分い
か
ら
な
ん
と
な
く
つ
い
て
る
こんな感じの成分で構成されています。
そして、モデルが回転していなくて、移動していない状態と言うのは、
単位行列と言う、
1000
0100
0010
0001
と言う行列で表されています。
これはつまり、
モデルのX軸ベクトルは完全にX方向を向いていて、
モデルのY軸ベクトルは完全にY方向を向いていて、
モデルのZ軸ベクトルは完全にZ方向を向いていて、
モデルの座標は(0,0,0)の原点に居ると言う状態です。
ですので、回転成分だけを消すには、行列の三行三列の部分までを単位行列にする事で実現出来ます。
この知識は様々な所で応用出来ますので、是非理解して下さい!
活用例:
常にモデルの向いている正面方向に移動をさせたい場合は、行列の三行目のベクトルを
座標に足し算してやればいい。
Re: DirectXにて、とある行列から回転を消す方法
Posted: 2017年9月24日(日) 21:59
by TKS
回転させたくないのであれば無理に戻そうとせず、回転行列の反映自体を省けば良いだけなのではと思います。
計算後のアフィン変換行列を直接単位行列にしてしまうと、
計算過程によっては欠落する情報が出てくるので、上手い対応とは言えません。