QT之OpenGL模型加载Assimp

文章介绍了如何利用Assimp库在OpenGL环境中加载和处理3D模型。首先,Assimp是一个用于导入多种3D模型格式的库,它将不同格式的数据转换为统一的结构。主要内容包括Assimp的数据模型如Scene、Mesh、Material和Node,以及如何编译和使用Assimp。接着,文章详细讲解了Mesh类和Model类的设计,Mesh包含顶点数据、索引和材质等信息,而Model负责将导入的模型转换为Mesh对象。最后,文章提供了一个Demo展示模型加载的过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. Assimp

Assimp(Open Asset Import Library) 开发资产导入库,主要用来将不同的模型数据进行数据结构统一化,使不同的3D模型数据结构能够通过Assimp的转换后拥有统一的数据结构,使OpenGL可以方便的加载负载的模型。

Assimp数据模型如下:
在这里插入图片描述

  • Scene(场景)
    所有的场景/模型数据都包含在场景对象中。场景对象也包含了场景根节点的引用。
  • Mesh(网格)
    Mesh是绘制的基本单元。一个Mesh对象本身包含了渲染所需要的所有相关数据,像是顶点位置、法向量、纹理坐标、面(Face)和物体的材质。
  • Material(材质)
    一个网格也包含了一个Material对象,它包含了一些函数能让我们获取物体的材质属性,比如说颜色和纹理贴图(比如漫反射和镜面光贴图)
  • Node(节点)
    Node可能包含子节点,它会有一系列指向场景对象中mMeshes数组中储存的Mesh数据的索引
  • Face(面)
    一个网格包含了多个面。面代表的是物体的渲染图元(三角形、方形、点)。一个面包含了组成图元的顶点的索引

根据上述数据结构,可归纳出其使用步骤如下:

  • 第一件事是将一个物体加载到Scene对象中,遍历节点,获取对应的Mesh对象(我们需要递归搜索每个节点的子节点),并处理每个Mesh对象来获取顶点数据、索引以及它的材质属性
  • 最终的结果是一系列的网格数据,将它们包含在一个Model对象中

2. Assimp使用

2.1 Assimp编译

步骤如下:

  • 安装CMake
  • 安装Visual Studio 2019
  • 下载Assimp源码
  • Assimp源码目录下,使用cmake -S . -B ./build命令生成Visual Studio 2019的解决方案
  • 打开build目录下的Assimp.sln生成最终所需的Assimp库文件

2.2 使用概述

由于会对
根据上述流程,接下会核心处理两部分MeshModel。两者的关系是Model包含Mesh

2.3 Mesh类

由于Mesh是绘制的基本单元,所以Mesh至少应该包含如下信息:

  • 顶点数据
    • 位置向量
    • 法线向量
    • 纹理坐标
  • 绘制的数据索引
  • 材质
    • 纹理ID
    • 纹理类型

同时Mesh应该包含绘制图形的函数draw()

2.4 Model类

Model类则负责将通过Assimp将外部模型导入,并将所有的节点转换为Mesh对象

3. Demo

Demo源码,实例结果如下:
在这里插入图片描述

4. 参考

  1. OpenGL Learn 模型加载
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值