目录

  • 1、前言
  • 2、Assimp库简介
  • 3、编译Assimp库的准备工作
  • 4、下载Assimp源码并编译

1、前言

  D3D12系列教程因为我转移精力学习Nodejs、VueJs等技能,暂时中断了一段时间,着实感觉有点对不起大家,这期间也有很多网友都在询问RTX系列教程还出不出,在这里一并向大家回复,这个系列将一直不间断,但不定期的更新下去,哪怕MS出到D3D13、D3D14…,只是时间问题请大家能够理解并谅解,毕竟人的精力是有限的,正如金大侠所言:人力有时而穷!

  在之前的系列基础教程中,为了教程的简洁和直接性,忽略了很多东西,甚至可以说只是跟大家介绍了如何调用D3D12的相关接口而已,但仅仅掌握这些是远远不够的。或者说掌握D3D12接口的使用方法,仅仅是本系列教程的目的之一。再学习的过程中,其实我们也涉足到了显卡体系结构,多线程渲染,多显卡渲染,Ray Tracing等丰富的内容。当然继续深入下去,就必须要进入光照、阴影、后处理、延迟渲染、3D动画、地形等等高级话题。当然这些话题教程中还没怎么涉足到,一方面是我也需要继续深入的学习,因为会用和能写出教程之间还是有不小的差距,尤其是还需要考虑到要教程的主题要集中和简单,这就需要大量的时间;另一方面,主要是因为这些话题其实都涉及一个不可逾越的障碍,那就是没有什么像样的模型可以免费试用,也没有介绍方便的导入方法;次一方面,我也在考虑制作新的视频教程,并且我采取的路线是自己假设视频教学直播网站,因此也需要大量的学习;除此考虑到我还要上班工作养家糊口,这些都需要耗费大量的时间和精力,所以后续的教程就耽搁了。

  正所谓“巧妇难为无米之炊”,其实很多时候,我想大家学习3D编程的目的无非就是想开发游戏,几乎每一个找我的网友无不对开发游戏有着强烈的兴趣,但是如果没有合适的3D模型,只是天天鼓捣那些方块、球体、平板之类的,时间长了,就很可能进入学习的瓶颈。并且这样下去也会让大家很有挫败感,所以抽空我就赶紧找了些资料,最早我想用DX9X中的Mesh导入加载的一系列接口,但是发现其实这个技术已经没什么价值了,即使搞通了也只是说可以方便的加载那些x文件而已,而且还要让DX12和DX9协同工作,貌似MS都放弃这样做了,曾经MS确实让DX9和DX11很好的合作了一段时间,但现在这已经很不合时宜了,因为X文件自身的限制,很多高级特性实质上再用X格式文件已经很难达到效果了。接着我又看了看FBX的导入插件,虽然功能强大,但是它实在是太复杂了,其内容够写一系列单独的教程了。最后我将目光聚焦在了Assimp这个库上。

  当然无论使用哪个库,这里都建议大家尽量用库导入所需要的3D模型,而不是自己写代码去解析原始模型文件,我有个搭档正在这样做,我一度劝诫他不要再这样搞下去了,而实际上他在自解析文件格式的道路上狂奔了竟然有一两年之久了,而进展只是可怜的仅能导入简单的圆锥、方块、球体等等,对于复杂的3D动画部分基本上已经没有精力再搞下去了,实质上这样即浪费时间,也完全没有必要,因为学习3D的重点还是应该放在Shader的学习和灵活运用上,也就是渲染的方法才是重点学习的目标。

  之所以选择Assimp作为此系列教程的3D模型导入库,一方面基于Assimp的简单易用性,并且它天然支持除了试验性质的X文件外,还支持FBX等很多3D模型的格式,而且它也支持动画数据的解析和导入,同时它还支持很多关于模型的预处理,并且它还是开源的。另一方面,无论什么第三方库,很多网友学习的第一个疑问就是:这个是不是最好的?学了之后万一不流行了是不是浪费了学习的时间?其它的更好的或更流行的又是什么?…其实这些疑问与困惑也是我一开始学习时的一个严重认识误区,记得尼采曾经说过:在你的脚下深挖下去,自会有泉水涌出!也就是说不管这个库怎么样,需要先深入的学习下去,之后融会贯通,学习其它的库也就不难了,当然这个过程中除了要掌握细节的比如API调用,还需要整体上有抽象的认识,尤其是对整体的功能框架要有认识,这样学其他的库,按功能逐个去掌握,学习的速度就会越来越快。这也是我自己学习方法的一个总结,比如曾经我就很深入的学习了OLEDB库,虽然这个库现在看来已经非常非常的古老的,甚至可以说已经淘汰了,但是因为当时的深入学习、灵活掌握和深度运用,现在我在学习掌握JavaScript的数据库编程接口时,可以说那感觉就像是开了挂一样的丝滑顺畅!

  在这里还要提一下,我的文章这样的前言交代非常的多,扯得也有点远,真实的目的就是让大家在学习的过程中,除了核心内容的学习之外,同时还能够不断的在思想上方法上也有所提升,也就是常说的学习的过程中还需要不断的“体道悟道”才是学习的正道。当然这也为一位不知名的“国际雷锋”同志的翻译工作带来了额外的麻烦,他不辞辛劳的将我的文章逐字逐句的翻译为了英文(其中一篇,其它的在页面找,需要翻墙):DirectX12 (D3D12) basic tutorial (4) - first know DirectXMath library, use constant heap to create constant buffer, understand pipeline state object, understand fence synchronization - Programmer Sought

在这里向这位“国际雷锋”同志表示由衷的感谢!

  OK,我们言归正传开始学习Assimp库!

2、Assimp库简介

  Open Asset Import Library,也称 Assimp,是一个可以处理许多 3D 格式的开源库,包括最受欢迎的二进制反码格式。它是跨平台的,可用于 Linux 和 Windows,非常容易使用和嵌入到 C/C++ 程序中。

  在它的官方文档中声称它支持下列3D模型文件的导入:

  • 3D 、3DS、3MF、AC、AC3D、ACC、AMJ、ASE、ASK、B3D、BLEND、BVH、CMS、COB、DAE/Collada、DXF、ENFF、FBX、glTF 1.0 + GLB、glTF 2.0、HMB、IFC-STEP、IRR / IRRMESH、LWO、LWS、LXO、MD2、MD3、MD5、MDC、MDL、MESH / MESH.XML、MOT、MS3D、NDO、NFF、OBJ、OFF、OGEX、PLY、PMX、PRJ、Q3O、Q3S、RAW、SCN、SIB、SMD、STP、STL、TER、UC、VTA、X、X3D、XGL、ZGL

  从这个长长的可导入文件类型的列表也可以直观的感受到Assimp库的强大。同时它也支持3D模型数据的导出,至于导出之后看有必要再向大家介绍。

  Assimp官方地址在:Home (assimp.org)

  Assimp的GitHub地址:assimp/assimp: The official Open-Asset-Importer-Library Repository. Loads 40+ 3D-file-formats into one unified and clean data structure. (github.com)

  看到这里大家可能会有个疑问:这个导入库到底是干嘛的?或者说“导入3D模型”本身是什么意思?其实这主要是因为3D模型数据本身的复杂性,多样性,导致我们通过简单的编码方式是没法生成复杂的3D模型的,如果再考虑到比如骨骼动画,复杂贴图等的支持,这已经不是简单的代码可以做到的了,因此大多数3D模型都是靠专用的工具由美工、动画师、视觉效果师等建模创作完成的,并且这些工具还会将这些创作的结果导出为各种自有格式的文件,然后再交由程序员加载、解算、转换后才能用于渲染。而导入库,就是将这些自有的特定格式的3D模型文件,通过读取解析文件的方式,按程序可以直接处理的数据形式或中间形式加载进内存的程序库。本文介绍的Assimp库就是将之前列举的各种3D模型文件内容统一加载为程序可以处理的数据形式,包括顶点数据、索引数据、材质数据、骨骼数据、动画数据等,还可以导入有些文件中特别指定的光源数据、摄像机数据等。而Assimp加载完这些数据时,都是以Assimp特有的数据结构形式提供的,在渲染之前,就需要我们再用我们自己程序能处理的数据结构形式完成一遍转换。

3、编译Assimp库的准备工作

  在具体使用Assimp时,当然可以从Assimp官网直接下载编译好的库来使用,但开源库的特征就是最新版往往需要我们自己根据需要编译的,同时编译时会有很多开关控制一些功能是否进行编译,因此掌握开源库的编译往往是学习开源库的第一个学习目标。

  在编译Assimp之前,需要做一些准备工作,首先需要下载安装CMake,下载地址:Download | CMake。安装的过程这里就不再赘述了,有关CMake的详细使用说明也不再详细讲解,CSDN中已经有很多教程示例了,大家自行搜索学习即可。这里只是提醒大家,CMake是现代C/C++程序员必须掌握的硬核技能之一,所以是值得花时间掌握的。

  需要注意的是,CMake版本最好是3.4以上的版本,因为太低的版本,与VS2019结合的还不是很好,很多动作需要我们手动来完成。

  安装成功后,可以在Windows PowerShell中输入如下命令,来查看是否安装成功:

cmake /V

  输出如下:

  接着需要下载安装Git客户端工具,下载地址:Git - Downloading Package (git-scm.com)。同样的安装的过程也不再赘述了。与CMake一样,Git也是现代程序员必须掌握的硬核技能之一。

安装完成后,在Windows PowerShell中输入如下命令:

git --version

  输出如下:

  然后需要我们安装VS2019,推荐安装免费的Community版本,下载地址:Visual Studio 2019 IDE - 适用于 Windows 的编程软件 (microsoft.com)。安装VS2019时一定要注意安装完整的Windows SDK,现在的DirectX SDK已经变成了其中的一部分。在编译Assimp时需要DirectX的SDK,否则编译过程会报错。

4、下载Assimp源码并编译

  准备工作做好之后,就是去GitHub上下载源码了,在Windows Powershell中输入如下命令:

git clone https://github.com/assimp/assimp.git

  运行如下:

  这个过程可能有些漫长,也可以使用Gitee克隆后下载:

git clone https://gitee.com/gamebaby_admin/assimp.git


  下载完成后进入Assimp的源码目录:

cd assimp

  并使用如下命令查看分支:

git branch -a

  结果如下:


  切换到的最新的发布分支上:

git checkout remotes/origin/assimp_5.0_release


  然后创建一个build目录,并进入:

mkdir build
cd build

  创建VS2019工程文件:

cmake ..

  直接运行命令行编译:

cmake --build .

  当然也可以使用多线程编译命令加快编译速度:

cmake --build . -j12

  编译的过程中会有很多警告,暂时不用理会,主要都是64位的数字直接赋值给了32位的变量引起的警告,这个目前无伤大雅。

  当然也可以通过VS2019打开解决方案然后再生成:

  双击sln文件,用VS2019打开后,在解决方案节点上单击右键,点击生成解决方案即可:

  最终生成的文件在如下的目录中:

  这些文件未来都需要复制粘贴到我们自己项目的exe文件输出目录中,重点是Assimp的dll库,从中可以看到,现在的库已经带上了编译器版本和库版本号,因为是Debug版所以建议把build\code\Debug\目录下的所有文件都复制到自己项目的exe文件所在目录中。或者在我们自己的项目中添加这些目录为Lib目录。其中的几个exe文件assimp开头的是一个命令行工具和一个模型查看器,unit.exe是一个检测编译结果的命令行工具,可以运行用来检测编译结果的正确性。

  最后还需要注意的是,在我们创建的build目录中有个include目录,这个目录也需要添加到我们引用项目的头文件包含目录中去。


  当然最后我们默认编译出来的是x64/Debug版本的Assimp库,通过在VS2019中切换为Release即可生成Release版的Assimp库,这里就不在赘述了。

DirectX12(D3D12)基础教程(外篇一)——编译Assimp相关推荐

  1. vue2+vue3小白零基础教程—vue2篇,全网2021最详细教程

    vue教程 提示:Vue3系列请参考Vue2+Vue3小白零基础教程-vue3篇文章,本文为vue2篇. 1. Vue核心 1.1 Vue简介 1.1.1 Vue是什么 一套用于构建用户界面的渐进式J ...

  2. Java入门基础教程第一篇

    Java入门基础 Java是是一门面向对象编程语言,现在广泛使用,名声和c/c++.python一样,虽然我最常用的语言是python,但现在现在闲来无事,就写了这篇文章. 目录 Java入门基础 下 ...

  3. NSIS安装制作基础教程[初级篇], 献给对NSIS有兴趣的初学者

    NSIS简介: NSIS 是"Nullsoft 脚本安装系统"(Nullsoft Scriptable Installation System)的缩写,它是一个免费的 Win32 ...

  4. iOS 应用内购买基础教程 swift篇

    应用内购买基础教程 原文地址http://www.raywenderlich.com/105365/in-app-purchases-tutorial-getting-started 更新日志:本教程 ...

  5. ESP32-C3入门教程 环境篇⑥——ESP-IDF编译原理简述(CMakeLists/CMake)和构建自定义项目

    文章目录 一.前言 二.ESP-IDF编译原理 2.1 基础知识 2.2 软件组件 2.3 构建过程 2.4 最简单的示例项目 三.构建自定义项目 3.1 项目重命名 3.2 main.c重命名 3. ...

  6. Fikker网站加速服务器|web缓存加速基础教程 - 安装篇

    安装说明: 当前的  Fikker  跨平台为 Windows  平台和  Linux  平台实现. Windows  版本支持  Win2000/XP/2003/Vista/2008/7  平台: ...

  7. vue基础教程总结篇,用最短的时间入门vue.js(持续更新...)

    目前,vue已经成为前端工程师必会的框架之一,这里简单总结一下,可以让您快速的入门vue,师傅带进门,修行靠个人,最主要的还是自己多动手,多实践,本专栏会持续更新. 1.vue安装教程及简介 2.vu ...

  8. 3D数学读书笔记——矩阵基础番外篇之线性变换

    本系列文章由birdlove1987编写.转载请注明出处. 文章链接:http://blog.csdn.net/zhurui_idea/article/details/25102425 前面有一篇文章 ...

  9. Fikker网站加速服务器|web缓存加速基础教程 - 简介篇

    前言: 本教程是针对第一次接触和使用  Fikker  的管理员们,侧重于实用性,利用许多最常用的案例,最快的速度达到网站加速,防盗链,伪静态,流量统计等目的. Fikker 简介: Fikker   ...

  10. XMind基础教程-主题篇

    一.下面介绍xmind的五种主题 中心主题: 每一张思维图有且仅有一个中心主题.这个主题在新建图的时候会被自动创建并安排在图的中心的位置. 当保存这个新建图的时候,中心主题的内容会默认设置为保存文件的 ...

最新文章

  1. 浏览器的工作过程(转)
  2. Ubuntu 下面部署Django 项目
  3. linux sort命令
  4. 从5随机到7随机及其扩展
  5. [HOW TO]-ubuntu20.04 上安装jenkins
  6. C#学习笔记二(函数高级参数)
  7. Spring MVC——ConverterltString, Dategt DEMO
  8. Apache Web Server - httpd 的文档根目录 及 访问控制
  9. 机载计算机结构,机载计算机
  10. 19_05_01校内训练[polygon]
  11. 947. 移除最多的同行或同列石头2021-01-23
  12. qkerntool使用说明
  13. BC26 OpenCPU RTC/PSM_EINT API接口
  14. eclipse指定jsp的默认打开方式
  15. mysql sql 除法运算_SQL语句怎么表示除法运算?
  16. IPhone多视图切换
  17. GIMP--GNU Image Manipulation Program
  18. C# 下载gif图片,动画丢失,解决办法
  19. GD32F450芯片管脚排列图
  20. js字符串怎么转python对象_python对象与json相互转换的方法 python中怎么把json对象转成字符串...

热门文章

  1. mysql 为什么使用视图_Mysql为什么要使用视图?
  2. PS李涛老师的课程笔记 【PS初级】光和色的关系
  3. AtCoder Beginner Contest 128
  4. [新版系统]软件著作权登记申请流程及注意事项
  5. Cause: java.sql.SQLException: 无法转换为内部表示
  6. 多进程-> 多线程 -> 异步 -> EventDriven -> Actor模式
  7. 360 html禁止自动填充,360极速浏览器如何停用“自动填充”功能
  8. 20V,24V转5V,20V,24V转3.3V降压芯片,IC介绍
  9. 在使用华为云CCE时遇到的问题
  10. 金蝶K3 WISE 12.1在Windows 2008 R2虚拟机服务器上的配置