ロゴ メインコンテンツへ
RSSフィード
「デジタルコンテンツ制作」に関連する記事一覧

OpenMaya 回転行列をオイラー角に変換

2011/02/21
(この記事の文字数: 415)

KINECTとNITEで取得したスケルトンの回転行列をMayaに持ってくるためにオイラー角に変換しようと思ったのですが、回転行列からオイラー角を求める計算って普通にやろうとすると結構複雑で手間がかかりそうだったのでOpenMayaのMTransformationMatrixクラスを使って変換しました。

他にもOGREを使ってたらQuaternionクラスから簡単に変換できるみたいです。

下記にMTransformationMatrixクラスを使った回転行列からオイラー角への変換の例を記します。

どっかのオープンソースから実装をコピーしてくる方がいいとは思いますが、OpenMayaも別にMayaのプラグインにしか使えないというわけではなく、下記の例のようにコンソールアプリケーションなんかでも使えるので、OpenMaya のユーティリティー関数を把握していると意外なところで役に立つかもしれません。

回転行列からオイラー角への変換の例


#define _USE_MATH_DEFINES
#include <math.h>
#include <iostream>
#define _BOOL
#include <maya/MMatrix.h>
#include <maya/MTransformationMatrix.h>
#pragma comment(lib, "OpenMaya.lib")

int main(){
    double eulerRot[3];
    double mat[4][4]={{0.8047, -0.5059, -0.3106, 0},
                      {0.3106,  0.8047, -0.5059, 0},
                      {0.5059,  0.3106,  0.8047, 0},
                      {     0,       0,       0, 1}};

    MMatrix rotmat(mat);
    MTransformationMatrix transform(rotmat);
    MTransformationMatrix::RotationOrder order;
    order = MTransformationMatrix::kXYZ;
    transform.getRotation(eulerRot,
                          order, 
                          MSpace::kObject);

    printf("Euler Rotation: %f %f %f\n", 
            eulerRot[0]*180/M_PI, eulerRot[1]*180/M_PI,
            eulerRot[2]*180/M_PI);
    return 0;
}
// Euler Rotation: -32.157376 18.095868 -32.156815

  このエントリーをはてなブックマークに追加  

<<「デジタルコンテンツ制作」の記事一覧に戻る

<<「デジタルコンテンツ制作」の次の記事

コメント(0 件)



コンテンツロード: 0.0083 sec
Copyright(C)2006-2024 puarts All Rights Reserved