从FBX解析骨骼蒙皮动画并使用OpenGL ES 渲染绘制

市面上骨骼动画的很多使用FBX为交换标准,本文原创,主要工作是 解析FBX并且制作自定义的格式,通过OpenGL ES 渲染骨骼蒙皮动画.

1、首先需要配置fbxsdk的环境,自行百度,不做赘述

2、分析FBX的信息,主要分成两部分,就是mesh的信息和对应的骨骼的信息,下面简单的说明下怎么解析mesh的信息

 fbxsdk::FbxImporter* const &importer = fbxsdk::FbxImporter::Create(m_Manager, "");
 importer->ParseForGlobalSettings(true);
 importer->ParseForStatistics(true);
 bool result = importer->Initialize(filename, -1, m_Manager->GetIOSettings());
 if(!result)
 {
     //读取失败
     return false;
  }


        m_Scene = FbxScene::Create(m_Manager, "__FBX_SCENE__");
        importer->Import(m_Scene);
        importer->Destroy();


        //转化scene的坐标系到默认的坐标系
        if(m_Scene)
        {
            FbxAxisSystem axis(defaultUpAxis, defaultFrontAxis, defaultCoordSystem);
            axis.ConvertScene(m_Scene);
        }


        if(m_Scene)
        {
            parseMeshes();
        }



 void FBXParser::parseMeshes()
    {
        int cnt = m_Scene->GetGeometryCount();
        FbxGeometryConverter converter(m_Manager);
        std::vector triangulate;




        //三角化操作
        for(int i = 0; i < m_Scene->GetGeometryCount(); ++i)
        {
            FbxGeometry * geometry = m_Scene->GetGeometry(i);


            if(!geometry->Is() || !((fbxsdk::FbxMesh*)geometry)->IsTriangleMesh())
            {
                triangulate.push_back(geometry);
            }
        }


        for(std::vector::iterator it = triangulate.begin(); it != triangulate.end(); ++it)
        {
            FbxNodeAttribute * const attr = converter.Triangulate(*it, true);
        }


        //处理所有的mesh
        cnt = m_Scene->GetGeometryCount();


        for(int i = 0; i < cnt; i++)
        {
            FbxGeometry * geometry = m_Scene->GetGeometry(i);


            if(geometry->Is())
            {
                fbxsdk::FbxMesh* mesh = static_cast(geometry);


                if(mesh)
                {
                    getMeshInfo(mesh);
                }
            }


        }
    }



你可能感兴趣的:(fbx)