欢迎您访问 最编程 本站为您分享编程语言代码,编程技术文章!
您现在的位置是: 首页

使用ASSimp库在OpenGL中加载模型的方法

最编程 2024-08-04 09:44:21
...

Assimp(Open Asset Import Library)是一个支持读取多种模型资源的开源库,当前最新的版本是3.0版,支持读取以下类型的3D模型:

  • Collada ( .dae )

  • Blender 3D ( .blend )

  • 3ds Max 3DS ( .3ds )

  • 3ds Max ASE ( .ase )

  • Wavefront Object ( .obj )

  • Industry Foundation Classes (IFC/Step) ( .ifc )

  • XGL ( .xgl,.zgl )

  • Stanford Polygon Library ( .ply )

  • *AutoCAD DXF ( .dxf )

  • LightWave ( .lwo )

  • LightWave Scene ( .lws )

  • Modo ( .lxo )

  • Stereolithography ( .stl )

  • DirectX X ( .x )

  • AC3D ( .ac )

  • Milkshape 3D ( .ms3d )

  • * TrueSpace ( .cob,.scn )Biovision BVH ( .bvh )

  • * CharacterStudio Motion ( .csm )Ogre XML ( .xml )

  • Irrlicht Mesh ( .irrmesh )

  • * Irrlicht Scene ( .irr )

  • Quake I ( .mdl )

  • Quake II ( .md2 )

  • Quake III Mesh ( .md3 )

  • Quake III Map/BSP ( .pk3 )

  • * Return to Castle Wolfenstein ( .mdc )

  • Doom 3 ( .md5* )

  • *Valve Model ( .smd,.vta )

  • *Starcraft II M3 ( .m3 )

  • *Unreal ( .3d )BlitzBasic 3D ( .b3d )

  • Quick3D ( .q3d,.q3s )

  • Neutral File Format ( .nff )

  • Sense8 WorldToolKit ( .nff )

  • Object File Format ( .off )

  • PovRAY Raw ( .raw )

  • Terragen Terrain ( .ter )

  • 3D GameStudio (3DGS) ( .mdl )

  • 3D GameStudio (3DGS) Terrain ( .hmp )

  • Izware Nendo ( .ndo )

支持以下格式的导出:

  • Collada ( .dae )

  • Wavefront Object ( .obj )

  • Stereolithography ( .stl )

  • Stanford Polygon Library ( .ply )

此外还支持对导入的模型做一些常用的处理,如把四边形转换为三角形、计算切线和副法线、将大模型分割为小模型等。

Assimp的主页:http://assimp.sourceforge.net/index.html

 

读取模型文件的一个例子:

#include <assimp/Importer.hpp>      // 导入器在该头文件中定义#include <assimp/scene.h>           // 读取到的模型数据都放在scene中#include <assimp/postprocess.h>     // 该头文件中包含后处理的标志位定义bool Import( const std::string& pFile) 
{   
    // 定义一个导入器 
    Assimp::Importer importer;   
    
    // 使用导入器导入选定的模型文件 
    const aiScene* scene = importer.ReadFile( pFile,
        aiProcess_CalcTangentSpace|            //后处理标志,自动计算切线和副法线
        aiProcess_Triangulate|                //后处理标志,自动将四边形面转换为三角面
        aiProcess_JoinIdenticalVertices|    //后处理标志,自动合并相同的顶点
        aiProcess_SortByPType);                //后处理标志,将不同图元放置到不同的模型中去,图片类型可能是点、直线、三角形等                                            //更多后处理标志可以参考Assimp的文档  
    if( !scene)   
    {        //导入错误,获取错误信息并进行相应的处理        //DoTheErrorLogging( importer.GetErrorString());     
        return false;  
    }   
    // 根据需要获取scene中的模型数据,各种数据的获取方式可以参考Assimp的文档    //DoTheSceneProcessing( scene);   
 
    return true; 
}

推荐阅读