首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

New程序媛OpenGL全解析之—模型加载

大家好

本期视频的链接地址是:

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的操作跟上一讲中的处理是一样的。

本期内容就到此结束了~

丹丹期待大家的意见和建议,欢迎小伙伴们积极留言

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180804G0JOR200?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券