web-dev-qa-db-ja.com

glmを使用したマトリックスへのクォータニオン

Glmのquatをmat4に変換しようとしています。

私のコードは:

#include <iostream>
#include<glm/glm.hpp>
#include<glm/gtc/quaternion.hpp>
#include<glm/common.hpp>
using namespace std;


int main()
{
    glm::mat4 MyMatrix=glm::mat4();
    glm::quat myQuat;

    myQuat=glm::quat(0.707107,0.707107,0.00,0.000);
    glm::mat4 RotationMatrix = quaternion::toMat4(myQuat);

    for(int i=0;i<4;++i)
    {
        for(int j=0;j<4;++j)
        {
            cout<<RotationMatrix[i][j]<<" ";
        }
        cout<<"\n";
    }
    return 0;
}

プログラムを実行すると、「エラー:「クォータニオン」が宣言されていません」というエラーが表示されます。

誰かがこれで私を助けることができますか?

9
Vishnu Murali

インクルードを追加します。

_#include <glm/gtx/quaternion.hpp>
_

そして、_toMat4_の名前空間を修正します。

_glm::mat4 RotationMatrix = glm::toMat4(myQuat);
_

glm::toMat4()は_gtx/quaternion.hpp_ファイルに存在します。これは ご覧のとおりglm名前空間のみを持っています。


また、補足として、C++ 14以降、ネストされた名前空間(glm :: quaternion :: toMat4など) 許可されていません

10
meepzh

Meepzhの答えに加えて、次のようにすることもできます。

glm::mat4 RotationMatrix = glm::mat4_cast(myQuat);

which しません必要#include <glm/gtx/quaternion.hpp>

6
mchiasson