大家好
本期视频的链接地址是:
https://www.bilibili.com/video/av28352518/
大家也可以直接在bi站首页搜索:New程序媛 ,即可看到相应视频
链接: https://pan.baidu.com/s/1i40J4FkCEmzQCvU3hn2sCg 密码: g89s
本文请大家视频搭配文章一起看哦
一直在用cube写代码,今天我们要开始加载酷酷的模型啦~
要加载模型就先要来了解模型的构成。
模型一般是由一个或者多个Mesh组成的。Mesh即网格的意思。一个Mesh中包含了顶点信息、索引信息、纹理信息、法线信息等绘制的重要数据。可以回想我们绘制cube的时候,是先定义了cube的顶点、纹理、索引这些信息,才能进行有效绘制的。模型只不过是利用建模软件构建了更复杂的网格而已。
模型可以分为单一Mesh的模型和多个Mesh的模型。比如游戏中的NPC就可以制作成单一Mesh模型。而类似坦克这种机械模型,就可以处理成多个Mesh,因为底座和炮塔是可以独立分开的。
程序中我们加载模型绘制的过程,其实就是从模型中读取网格数据,并根据读取的数据进行最终的绘制过程。
模型文件就如我们的图片文件一样,有很多不同的格式。
常见的格式有: .obj .fbx .x .3ds等等
每种不同格式的文件存储着不同信息格式的模型,类似之前读取不同格式图片我们使用的SOIL库,读取不同模型我们可以用到Assimp库。
根据需要下载对应的版本。
Assimp View需要依赖DirectX,所以如果要编译Assimp View需要先安装DirectX SDK,可以从微软的官网下载并安装,官网地址如下:
http://www.microsoft.com/en-us/download/details.aspx?id=6812
因为Assimp是依赖boost库的,如果没有boost库只能编译出一个功能受限的版本,所以我们第一步就是下载boost库,但Assimp没有用到boost需要编译的部分,所以boost只需要下载解压就可以了。
boost官网如下:
之后解压缩Assimp包,参照配置环境时的操作,用CMake生成对应的解决方案文件,只不过在配置生成的时候,我们需要点击Add Entry来设置boost的路径如下图,之后点击configure按钮即可。
得到了对应的解决方案文件后编译得到.lib和.dll文件。如果忘记了的小伙伴请翻到:
Assimp库中的include文件夹的内容,全部拷贝到我们的项目include中的Assimp文件夹中,编译生成的.lib文件拷贝到Lib文件夹中,.dll文件拷贝到生成exe文件的路径中。即完成了Assimp库的配置。
接着咱们来整体了解下Assimp库,整体结构。
当导入一个模型文件时,即Assimp加载一整个包含所有模型和场景数据的模型文件到一个scene对象时,Assimp会为这个模型文件中的所有场景节点、模型节点都生成一个具有对应关系的数据结构,且将这些场景中的各种元素与模型数据对应起来。
场景中包含了根节点、网格和材质数据。
每一个节点又由网格和孩子节点组成。
每一个Mesh网格数据由:顶点、法线、纹理、面(包含的是索引数据)、材质编号属性组成。
接着咱们就来看看如何在代码中使用。
首先咱们定义好Mesh类
2.编写模型类
3.看看代码中如何使用:
基于之前的代码,我们把所有绘制的数据替换成了一个Model,在初始化InitData中进行初始化,并在绘制中设置好对应矩阵,进行Model类Draw函数的调用,即可。Camera的操作跟上一讲中的处理是一样的。
本期内容就到此结束了~
丹丹期待大家的意见和建议,欢迎小伙伴们积极留言
领取专属 10元无门槛券
私享最新 技术干货