3D模型讀取庫:Assimp

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; 
}
複製代碼

 

發佈了162 篇原創文章 · 獲贊 19 · 訪問量 86萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章