使用ASSimp库在OpenGL中加载模型的方法
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; }
推荐阅读
-
Java 8新特性探究(十三)JavaFX 8新特性以及开发2048游戏-JavaFX历史## 跟java在服务器端和web端成绩相比,桌面一直是java的软肋,于是Sun公司在2008年推出JavaFX,弥补桌面软件的缺陷,请看下图JavaFX一路走过来的改进 从上图看出,一开始推出时候,开发者需使用一种名为JavaFX Script的静态的、声明式的编程语言来开发JavaFX应用程序。因为JavaFX Script将会被编译为Java bytecode,程序员可以使用Java代码代替。 JavaFX 2.0之后的版本摒弃了JavaFX Script语言,而作为一个Java API来使用。因此使用JavaFX平台实现的应用程序将直接通过标准Java代码来实现。 JavaFX 2.0 包含非常丰富的 UI 控件、图形和多媒体特性用于简化可视化应用的开发,WebView可直接在应用中嵌入网页;另外 2.0 版本允许使用 FXML 进行 UI 定义,这是一个脚本化基于 XML 的标识语言。 从JDK 7u6开始,JavaFx就与JDK捆绑在一起了,JavaFX团队称,下一个版本将是8.0,目前所有的工作都已经围绕8.0库进行。这是因为JavaFX将捆绑在Java 8中,因此该团队决定跳过几个版本号,迎头赶上Java 8。 ##JavaFx8的新特性 ## ###全新现代主题:Modena 新的Modena主题来替换原来的Caspian主题。不过在Application的start方法中,可以通过setUserAgentStylesheet(STYLESHEET_CASPIAN)来继续使用Caspian主题。 参考http://fxexperience.com/2013/03/modena-theme-update/ ###JavaFX 3D 在JavaFX8中提供了3D图像处理API,包括Shape3D (Box, Cylinder, MeshView, Sphere子类),SubScene, Material, PickResult, LightBase (AmbientLight 和PointLight子类),SceneAntialiasing等。Camera类也得到了更新。从JavaDoc中可以找到更多信息。 ###富文本 强化了富文本的支持 ###TreeTableView ###日期控件DatePicker 增加日期控件 ###用于 CSS 结构的公共 API
-
3D封装模型库在AD中的添加方法(详细教程)
-
在Mac上使用Assimp编译OpenGL模型加载教程
-
在VS 2022中使用OpenGL加载ASSIMP模型的步骤
-
使用Assimp在QT和OpenGL中加载模型
-
在Linux上使用Assimp加载网格时出现未加载问题的解决方法
-
在Linux平台上使用aarch64进行assimp模型库的交叉编译指南
-
使用assimp库在OpenGL中导入模型
-
在Unreal Engine 4的Runtime中,使用Assimp库导入各类3D文件(如fbx、obj和gltf)到UStaticMesh
-
使用ASSimp库在OpenGL中加载模型的方法