Introduction to 3D Game Programming with Directx12 Chapter6

(一)、前言

  相比Introduction to Directx11,Introduction to Directx12由于页面的问题(目前已经是900余页),删除了Terrain Rendering、Particle System and StreamOut、Meshes、Displacement Mapping相关内容。因为Directx12底层架构的巨大变化,因此,很多章节都重新进行了编写,并不是对Introduction to Directx11的一个简单调整,作者还重写了整个代码框架。由于架构调整,程序员需要对几乎所有内存管理、GPU与CPU同步,资源转换等底层工作自行进行管理,因此学习Introduction to Directx12学习曲线还是比较陡峭的。
  接下来的本系列就是对这本书的的编程类习题解答。我们的代码基于Win10 + VS2015编译通过,目标平台版本是10.0.10586.0,所有习题路径放于原Chapter目录下,我们力争将所有资源放于各习题目录下,但由于部分习题需要修改Common文件下内容,我们将Common文件夹打包附于本文后,之后章节将只附相关习题而不再打包Common文件夹。为顺利运行代码,请读者自行下载本书附带源码,地址附于本文后。

(二)、习题解答

1、Exercise2

  本习题主要是让读者明白,Directx12支持对不同一结构数据从不同数据槽输入,本习题修改了COMMOM中的 BoxApp.cpp MeshGeometry,因其为特例,已将Common放于习题同目录。

这里写图片描述

2、Exercise2

  本习题需要先定义好Vertex位置,其他就是修改PrimitiveTopology的问题,直接上答案。

这里写图片描述

D3D_PRIMITIVE_TOPOLOGY_POINTLIST

这里写图片描述

D3D_PRIMITIVE_TOPOLOGY_LINESTRIP

这里写图片描述

D3D_PRIMITIVE_TOPOLOGY_LINELIST

这里写图片描述

D3D_PRIMITIVE_TOPOLOGY_TRIANGLESTRIP

这里写图片描述

D3D_PRIMITIVE_TOPOLOGY_TRIANGLELIST

3、Exercise4

  本习题也主要是定义Vertex

这里写图片描述

4、Exercise6

  本习题有误,公式应该如下:
  vin.PosL.xy += 0.5f *sin(vin.PosL.x) *sin(3.0f*gTime)
  vin.PosL.z += 0.6f * sin(2.0f*gTime)

这里写图片描述

5、Exercise7

  本习题的中合并Vertex和Index不是太大问题,但分开放置两个物体是难点,解题思路是在DescriptorHeap中放置两个Descriptor指向不同的CBuffer,在DrawCall时切换不同的cbv,使之对应到不同的CBuffer。在本题中,尝试在Update中更新mObjectCB是不对的,因为CommandList的缘故,最后一次更新的结果会覆盖前一次的值,使之无法区分两个不同矩阵。这也是与Directx11不同的地方。

这里写图片描述

6、Exercise8、Exercise9、Exercise10

  没什么难点,请直接看代码。

7、Exercise11

  本习题说明,Layout与 Vertex Structure的顺序并不会影响数据的获取。

8、其他习题

  Exercise12、Exercise13主要是体验一下Viewport、Scissor的作用。Exercise14、Exercise16体验一下使用时间达到动画的效果。Exercise15主要是体验一下Clip函数的作用。效果如下:

这里写图片描述

Exercise12

这里写图片描述

Exercise13

这里写图片描述

Exercise14

这里写图片描述

Exercise15

这里写图片描述

Exercise16

(三)、代码下载

1、Introduction to 3D Game Programming with Directx12 附带源码 Introduction to 3D Game Programming with Directx12 附带源码
2、Common文件夹 Common文件夹
3、本章习题源码 本章习题源码

猜你喜欢

转载自blog.csdn.net/yolon3000/article/details/79795867