1 Fbxsdk与OpenGL中矩阵存储顺序的不同

Fbxsdk的文档说明了FbxAMatrix是行主序矩阵,而OpenGL或者说glm中的glm::mat4是列主序矩阵,所以二者进行转换时要进行转置。

2 Fbxsdk::FbxAMatrix转换为glm::mat4

    glm::mat4 FbxModel::FbxMatToGlm(const FbxAMatrix& mat)
    {
        // row:列 column : 行
        // Fbxsdk使用行主序存储矩阵,glm使用列主序存储矩阵,所以要进行转置
        glm::vec4 c0 = glm::make_vec4((double*)mat.GetColumn(0).Buffer()); // 得到矩阵第一行数据 
        glm::vec4 c1 = glm::make_vec4((double*)mat.GetColumn(1).Buffer());
        glm::vec4 c2 = glm::make_vec4((double*)mat.GetColumn(2).Buffer());
        glm::vec4 c3 = glm::make_vec4((double*)mat.GetColumn(3).Buffer());
        glm::mat4 convertMatr = glm::mat4(c0, c1, c2, c3);
        return glm::transpose(convertMatr);
    }