行列から角度の求めかた

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

行列から角度の求めかた

#1

投稿記事 by はね » 16年前

いつもお世話になっています。


現在、カメラ行列から角度を求める関数を作っているのですが、
YZ軸がうまく出力できずに困っています。

現象としてはカメラのupベクトルによって角度が安定して取れていないようです。

Y軸の角度は-90~90
Z軸の角度は-180~180まで取りたいです。

以下に製作中の関数を載せさせて頂きますのでご教示お願いいたします。
なおX軸の処理は省略しています。
/* 引数:カメラ行列 求める角度 */ 
int mat2rot(Matrix3 mat, float deg[3]) 
{ 
  int i; 
 /* Y軸が±90のとき */ 
  if( fabs(mat.m[2][0]) > (1.0-eps5E) ) { 
    deg[0] = PrevDegree.x;/* 表示をそのままにしたいのでひとつ前の角度を入れる */ 
    deg[2] = PrevDegree.z; 
    deg[0] = deg[0] * M_PI / 180.0f; 
    deg[2] = deg[2] * M_PI / 180.0f; 
    deg[1] = -asin(mat.m[0][2]); 
  } else { 
    deg[1] = -asin(mat.m[2][0]); 
    deg[2] = atan2(mat.m[0][1],mat.m[0][0]); 
  } 

  for(i = 0; i < 3; i++) { 
    deg *= (180.0/M_PI); 
  } 

  return 1; 
}



ちなみに出力した行列は以下です。
0.999998 -0.001268 0.001702 0.000000 
-0.001767 -0.053233 0.998581 -0.000000 
-0.001175 -0.998581 -0.053235 -7.584273 
0.000000 0.000000 0.000000 1.000000

Justy

Re:行列から角度の求めかた

#2

投稿記事 by Justy » 16年前


>カメラ行列から角度を求める

 そういう処理が必要な状況をなんとかした方がいいと思うんですが。

Lμcifer @Wiki - オイラー角と行列の相互変換
ttp://www7.atwiki.jp/lucifer/pages/13.html

 こちらを参考にすれば、なんとかなる……かもしれません。

閉鎖

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