現在、カメラ行列から角度を求める関数を作っているのですが、
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