DirectXにて、とある行列から回転を消す方法

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
tomtomさん

DirectXにて、とある行列から回転を消す方法

#1

投稿記事 by tomtomさん » 7年前

こんばんは。
件名の通りです。

例えば、X軸に30度回転した行列があるとします。
この行列から回転を消し(無くし?)、回転角度を0度にしたいと思っています。
ちなみに、今回は30度としましたが、実際には何度回転しているかわからないものとしてください。

ご回答よろしくお願いいたします。

Math

Re: DirectXにて、とある行列から回転を消す方法

#2

投稿記事 by Math » 7年前

>例えば、X軸に30度回転した行列があるとします。
>この行列から回転を消し(無くし?)、回転角度を0度にしたいと思っています
"X軸に30度回転した行列"
”行列から回転を消し”
がなにか イメージしにくいので具体的な行列を提示してください。
(アフィン変換したものをアフィン変換前に状態に戻す(逆変換)したいということでしょうか。)

tomtomさん

Re:

#3

投稿記事 by tomtomさん » 7年前

Mathさん

コードで表しますと、

コード:

 
D3DXMATRIX mRot;
D3DXMatrixRotationX(&mRot, D3DXToRadian(30));
この、mRotの回転を潰すということです。
30度逆に回転させれば当然回転はなくなりますが、回転角度が不明なため、それが出来ないのです

Math

Re: DirectXにて、とある行列から回転を消す方法

#4

投稿記事 by Math » 7年前

自分ゲームを作っているというシチュエーションではないということでしょうか。
前の画像を保持して戻すことも出来ないのでしょうか。

tomtomさん

Re:

#5

投稿記事 by tomtomさん » 7年前

>>前の画像を保持して戻すことも出来ないのでしょうか。

そうですね、出来るほど簡単な状況ではないです。
例は極端に簡単に説明しましたけど。
ちなみに画像とは・・・?

それはそうと、自己解決しました。
._11など、行列の中身をいじることで回転を潰すことが出来ました。
多少強引ではありますが、しばらくはこれでいってみます。
今後弊害が出ればまた考えたいと思います。

manntera
記事: 13
登録日時: 11年前

Re: DirectXにて、とある行列から回転を消す方法

#6

投稿記事 by manntera » 7年前

行列は、
〇〇〇〇 ←モデルのX軸が向いているベクトル
〇〇〇〇 ←モデルのY軸が向いているベクトル
〇〇〇〇 ←モデルのZ軸が向いているベクトル
〇〇〇〇 ←モデルの座標
↑ ↑ ↑ ↑
ベベベ計
ククク算
トトト上
ルルル都
ののの合
X Y Z が
成成成良
分分分い
   か
   ら
   な
   ん
   と
   な
   く
   つ
   い
   て
   る

こんな感じの成分で構成されています。
そして、モデルが回転していなくて、移動していない状態と言うのは、
単位行列と言う、
1000
0100
0010
0001
と言う行列で表されています。
これはつまり、
モデルのX軸ベクトルは完全にX方向を向いていて、
モデルのY軸ベクトルは完全にY方向を向いていて、
モデルのZ軸ベクトルは完全にZ方向を向いていて、
モデルの座標は(0,0,0)の原点に居ると言う状態です。

ですので、回転成分だけを消すには、行列の三行三列の部分までを単位行列にする事で実現出来ます。

この知識は様々な所で応用出来ますので、是非理解して下さい!

活用例:
常にモデルの向いている正面方向に移動をさせたい場合は、行列の三行目のベクトルを
座標に足し算してやればいい。

TKS

Re: DirectXにて、とある行列から回転を消す方法

#7

投稿記事 by TKS » 7年前

回転させたくないのであれば無理に戻そうとせず、回転行列の反映自体を省けば良いだけなのではと思います。

計算後のアフィン変換行列を直接単位行列にしてしまうと、
計算過程によっては欠落する情報が出てくるので、上手い対応とは言えません。

返信

“C言語何でも質問掲示板” へ戻る