Assimp的全称是Open Asset Import Library,一个很流行的OpenGL 3D+4D 模型处理框架。 注:上面的环境,Assimp和NDK的版本比较重要,特别是Assimp,有些版本是有bug的,编译时直接报错。 首先执行下面的命令: cd xxx/assimp // 下载assimp,然后解压,进入assimp根目录 mkdir buildAndroid // 创建文件夹 cd buildAndroid // 获得libassimp.so文件 上面make如果没出错的话,直接去assimp/buildAndroid/code目录下寻找libassimp.so文件吧,这个就是我们的目标啦。 Assimp编译实录 Compile Assimp Open Source Library For Android Windows环境下编译Assimp库生成Android可用的.so文件 Android
在Ubuntu下编译Assimp库 怎样在Ubuntu下编译Assimp库?这是我曾经编译成功后做的笔记,供參考。 1、去以下的站点去下载Assimp库; http://assimp.sourceforge.net/ 2、安装cmake,似乎Assimp库仅仅能通过cmake和vsproject文件进行构建, 而assimp是依赖boost的,所以我们仅仅能通过官方给出的通融办法。另外。我不喜欢动态链接。使用起来非常麻烦。我喜欢静态链接,因此我通过这么定义来产生自己须要的makefile。
Assimp介绍,参考:opengl-Assimp,Assimp的作用已经说的非常清晰了 2. 编译参考:Assimp编译安装 图省事,mac上开发直接用brew install assimp,iOS/Android平台需要编译对应的库,需要自己编译 源码编译有两处坑: 2.1 Ver 错误代码 去掉多余的 '>'即可 2.2 ld: library not found for -lminizip github上也有人提问,参考:https://github.com/assimp /assimp/issues/2553 1)brew install minizip 2)手动添加"LINK_DIRECTORIES(/usr/local/lib)"到源码的CMakeLists.txt
研究了下发现,主要是两类,一类是sphere贴图,另一类是toon贴图,然而Assimp并没有载入这两种贴图。而且在载入另一个模型的时候还出现了mesh没解析出正确材质的问题。 所以没办法,我开始阅读Assimp。 Assimp的代码结构还是非常清晰的,看CMakeLists就能大致了解整个项目结构。MMD模型载入相关的代码位于code/MMD。 然鹅很神奇的是MMDImporter里并没有把这个数据转换成Assimp的格式,推测原因是Assimp的数据结构并没有能正确存储这两种贴图的方式。 看来用Assimp是凉凉了,要么只能曲线救国,直接使用Assimp里面MMD载入的code。不过不幸的是之前还有mesh贴图载入的错误,因此这段代码大概也是有BUG的。 没办法,只能自己想办法解析了,或者是根据现有的Assimp代码进行修改。于是我找到了一份PMX2.1的格式文档,发现PMX模型的细节还是相当复杂的。
模型加载库 Assimp Assimp 全称为 Open Asset Import Library,可以支持几十种不同格式模型文件的解析(同样也可以导出部分模型格式),Assimp 本身是 C++ 库, Assimp生成的模型文件数据结构 一个模型往往是由很多小模型组成,这些小模型在 Assimp 中称之为 Mesh ,Mesh 进行独立渲染,Mesh 对象本身包含渲染所需的所有相关数据,比如顶点位置、 编译模型加载库 Assimp Assimp 源代码地址:https://github.com/assimp/assimp 环境准备: Windows 7 Android Studio 版本> 2.3.0 从 Github 下载 Assimp(本文使用的是 assimp-v.5.0.0) 源码并解压到一个新建文件夹 BuildAssimp 中; 2. these based on SET ASSIMP_DIR=assimp-v.5.0.0 SET OUTPUT_DIR=assimp-build-arm SET ANDROID_PATH=D:\AndroidSDK
mkdir Win/assimp/Include mkdir Win/assimp/Lib mkdir Win/assimp/Lib/Debug =OFF cmake --build assimp/build-debug --config Debug -j 8 cmake -S assimp -B assimp assimp/include/* Win/assimp/Include cp assimp/build-debug/include/assimp/config.h Win/assimp /Include/assimp cp assimp/build-debug/lib/Debug/assimp-vc142-mtd.lib Win/assimp/Lib/Debug cp assimp/build-debug/lib/Debug/assimp-vc142-mtd.pdb Win/assimp/Lib/Debug cp assimp/build-release
2.2.1 OBJ文件的加载 首先是对于OBJ文件的加载,我使用了一个非常流行的模型导入库——Assimp Assimp能够导入很多种不同的模型文件格式,它会将所有的模型数据加载至Assimp的通用数据结构中 当Assimp加载完模型之后,就能够从Assimp的数据结构中提取所需的所有数据。 来加载模型至Assimp的一个叫做scene的数据结构中 #include <assimp/Importer.hpp> #include <assimp/scene.h> #include <assimp // 声明了Assimp命名空间内的一个Importer,之后调用了它的ReadFile函数 Assimp::Importer import; const aiScene *scene 熟悉了Assimp库:使用Assimp库来加载模型是一个非常有用的技能,它使加载不同格式的3D模型变得更加容易。我学到了如何使用Assimp导入模型数据,以及如何在OpenGL中使用这些数据。
模型重心如下图所示: Part3代码获取模型重心 这里我们通过assimp库来获取模型的重心。关于assimp,参考我们上一篇文章。 三维模型格式转换神器-assimp 这里我们以fbx模型为例,来说明获取重心的步骤。 aiScene 2、遍历aiScene下RootNode下的所有节点 3、获取aiMesh来计算模型的重心 1加载模型 加载模型示例代码如下: auto inFile = R"(tt2.fbx)"; Assimp mScenePtr) { std::cout << "nullptr == mScenePtr" << std::endl; return -1; } 2遍历node 整个assimp 一致 1、当3dmax导出的fbx为Y轴向上时 3dmax坐标如下: box01:中心点坐标(0,-0.5,1) box02:中心点坐标(0,1.5,1) box03:中心点坐标(2,-0.5,0) assimp
3D 模型渲染 上一节简单介绍了常用的 3D 模型文件 Obj 的数据结构和模型加载库 Assimp 的编译,本节主要介绍如何使用 Assimp 加载 3D 模型文件和渲染 3D 模型。 vector<Texture> loadMaterialTextures(aiMaterial* mat, aiTextureType type, string typeName); }; 使用 Assimp 加载 3D 模型比较简单,最终模型被加载到一个 Assimp 中定义的 aiScene 对象中,aiScene 对象除了包含一些网格和材质,还包含一个 aiNode 对象(根节点),然后我们还需要遍历各个子节点的网格 #include "assimp/Importer.hpp" #include "assimp/scene.h" #include "assimp/postprocess.h" Assimp::Importer Model 类中加载模型的函数: void loadModel(string const &path) { Assimp::Importer importer; const aiScene
3D 模型渲染 上一节简单介绍了常用的 3D 模型文件 Obj 的数据结构和模型加载库 Assimp 的编译,本节主要介绍如何使用 Assimp 加载 3D 模型文件和渲染 3D 模型。 vector<Texture> loadMaterialTextures(aiMaterial* mat, aiTextureType type, string typeName); }; 使用 Assimp 加载 3D 模型比较简单,最终模型被加载到一个 Assimp 中定义的 aiScene 对象中,aiScene 对象除了包含一些网格和材质,还包含一个 aiNode 对象(根节点),然后我们还需要遍历各个子节点的网格 #include "assimp/Importer.hpp" #include "assimp/scene.h" #include "assimp/postprocess.h" Assimp::Importer Model 类中加载模型的函数: void loadModel(string const &path) { Assimp::Importer importer; const aiScene
Assimp库提供以下支持: 支持多种文件格式:Assimp支持导入和导出多种常见的3D模型文件格式,包括但不限于OBJ、FBX、Collada、STL、3DS等。 这意味着开发者可以直接使用Assimp来处理各种来源的模型文件,而不必依赖于不同的导入工具或者库。 额外的功能:除了基本的模型导入和导出功能之外,Assimp还提供了一些额外的功能,如网格处理、纹理加载、材质处理等。 活跃的社区支持:Assimp拥有一个活跃的开发者社区,提供了丰富的文档、示例代码和技术支持。开发者可以通过社区论坛、邮件列表等渠道获取帮助,解决在使用Assimp过程中遇到的问题。 所以Assimp是一个非常实用和强大的库,为开发者处理各种不同格式的3D模型提供了便利和支持。
7.正在编译中,等待...过程中有其它问题再来更新 8.D:\qt-everywhere-opensource-src-5.6.0\qt3d\src\plugins\sceneparsers\assimp \assimp.pro 这一行:PLUGIN_CLASS_NAME = AssimpParserPlugin 改为:PLUGIN_CLASS_NAME = AssimpSceneParserPlugin
导入功能由V-REP的Assimp插件处理。查看这里的API函数。如果使用所需的标志重新编译Assimp库(和Assimp插件),就可以支持更多格式。 V-REP的Assimp插件也处理导出功能。请查看这里的API函数。
%SrcDir%\qt3d\src\3rdparty\assimp\include\assimp\Compiler\pstdint.h,(410行:)改成 typedef __int32 int32_t
brew install cmake assimp glm glfw mkdir build cd build cmake ../. make -j8 但是这个编译结果并不是我们想要的,因为它编译出来的都是二进制可执行文件 下面给出新的编译代码: brew install cmake assimp glm glfw mkdir build cd build cmake -G "Xcode" ..
包含简单的颜色渲染、纹理渲染、立方体Cube、Assimp模型加载等等。部分功能使用Java编写,另外一部分功能使用C++编写。希望能给各位一些有用的参考。本项目托管在wxdut@github。
Zi QMAKE_CFLAGS_DEBUG = -Zi -MTd 修改zlib编译报错 修改\qt-everywhere-opensource-src-5.5.1\qt3d\src\3rdparty\assimp \assimp.pri,将 contains(QT_CONFIG, system-zlib) { unix|mingw: LIBS += -lz else: LIBS += zdll.lib 修改下\qttranslations\translations\Makefile.Debug和\qttranslations\translations\Makefile.Release相关的路径即可 编译ASSIMP
核心功能支持 1000+ 格式转换:包括视频(FFmpeg)、文档(Pandoc)、图像(GraphicsMagick/Vips/Inkscape)、3D(Assimp)、LaTeX 等 。 技术架构架构优势特性描述全集成多引擎内置 FFmpeg、Pandoc、GraphicsMagick、Vips、Inkscape、Assimp,统一管理转换流程Bun + Elysia 高效搭配 TypeScript
Silk.NET.Assimp - 用于解析三维模型。 Silk.NET.Maths - 一个完善的数学库。
如字符串、整数和实数等工程属性,以支持参数化工作流和丰富的数据交换(2)用户希望改进GLTF格式的边和顶点导出功能,解决当前在合并面时边导出失效的问题,并提供连续的线条显示而非虚线显示(3)用户希望增加Assimp