LearnOpenGL Assimp

2020-10-11  本文已影响0人  li_礼光

模型加载库

现在市面上有一个很流行的模型加载库,叫做Assimp,全称为Open Asset Import Library。Assimp可以导入几十种不同格式的模型文件(同样也可以导出部分模型格式)。只要Assimp加载完了模型文件,我们就可以从Assimp上获取所有我们需要的模型数据。Assimp把不同的模型文件都转换为一个统一的数据结构,所有无论我们导入何种格式的模型文件,都可以用同一个方式去访问我们需要的模型数据。

当导入一个模型文件时,即Assimp加载一整个包含所有模型和场景数据的模型文件到一个scene对象时,Assimp会为这个模型文件中的所有场景节点、模型节点都生成一个具有对应关系的数据结构,且将这些场景中的各种元素与模型数据对应起来。下图展示了一个简化的Assimp生成的模型文件数据结构:

Assimp

所以我们要做的第一件事,就是加载一个模型文件为scene对象,然后获取每个节点对应的Mesh对象(我们需要递归搜索每个节点的子节点来获取所有的节点),并处理每个Mesh对象对应的顶点数据、索引以及它的材质属性。最终我们得到一个只包含我们需要的数据的Mesh集合。



Mac 系统导入Assume

官方方式 : 通过Assimp的下载页面下载最新的版本, 然后通过CMake的方式来生成.

Mac方式
通过 brew install assimp 命令行的方式直接安装在/usr/local/Cellar目录下.

现在安装的最新版本是5.0.1

跟加载glfw库一样, 在Header Search Paths添加path和dylib


正常能加载头文件就没问题了

#include <assimp/Importer.hpp>
#include <assimp/scene.h>
#include <assimp/postprocess.h>

如果有遇到 library not found for -lminizip
github参考:https://github.com/assimp/assimp/issues/2553
brew install minizip



网格(Mesh)

用建模工具构建物体时,美工通常不会直接使用单个形状来构建一个完整的模型。一般来说,一个模型会由几个子模型/形状组合拼接而成。而模型中的那些子模型/形状就是我们所说的一个网格。例如一个人形模型,美工通常会把头、四肢、衣服、武器这些组件都分别构建出来,然后在把所有的组件拼合在一起,形成最终的完整模型。一个网格(包含顶点、索引和材质属性)是我们在OpenGL中绘制物体的最小单位。一个模型通常有多个网格组成。

参考 :
Mac OS下安装assimp
opengl模型加载-assimp编译(mac)

上一篇 下一篇

猜你喜欢

热点阅读