Skip to content

NiHan1997/DirectX11Exercise

Repository files navigation

Direct3D 11 龙书习题解答

说明

  • 本案例运行环境为windows 10,在windows 7环境下无法运行,后序会开发windows 7运行的分支。

Chapter 6

  • 01 Chapter 6 BoxApp: 在学习过DX12的基础之上,DX11的逻辑反而更加简单,在这里无需赘述。在这里对原先框架进行了大量修改,添加了一些常用的方法,具体可以参考d3dApp.h/.cpp和d3dUtil.h/.cpp文件。在DX11中已经支持HLSL,并且编译器也会警告,未来可能不再支持FX相关的编译,在这里也全部使用了HLSL新的处理方式。
  • 02 Chapter 6 ShapesApp: 在这里对框架再次进行了修改,在d3dApp.h中添加了绘制几何体的辅助结构,在绘制物体时可以方便地堆顶点缓冲区和索引缓冲区进行偏移。同时修复了d3dApp中OnResize()方法中的bug,避免Comptr的引用错误。
  • 03 Chapter 6 WavesApp: 动态顶点缓冲区和常量缓冲区类似,都需要每一帧都更新数据,实现起来并不复杂。相比DX12,DX11不能操纵GPU围栏,因此不能将常量资源封装,这样对于静态物体就不用每一帧更新了,这是DX12十分优越的一点。
  • 04 Chapter 6 Exersice_2: 两个输入槽分别处理位置和顶点数据,在这里需要创建两个顶点缓冲区,在绘制时也需要根据输入槽不同指定对应的顶点缓冲区。

Chapter 7

  • 05 Chapter 7 WavesLightingApp: 在这里将框架再次重构,添加了光照信息、材质信息,优化了时间处理。
  • 06 Chapter 7 ShapesLightingApp: 有了光照,场景相对的有了一定细节,后序还会更加完善。

Chapter 8

  • 07 Chapter 8 CrateApp: 纹理使用细节很多,在这里只是最基础的使用。
  • 08 Chapter 8 WavesApp: 原书基础上还原,添加了纹理,程序逐渐开始有趣,陆地海洋也开始漂亮了。
  • 09 Chapter 8 Exercise_3: 此题使用了两张纹理,这里初学可能会有一个误区,就是一个物体只能绑定一个材质,一个材质只有一张纹理,实质上在这里材质只是有一个纹理在描述符堆中索引,并没有绑定材质,最终着色器接收纹理还是在IA阶段。此题还有一个难点就是纹理旋转,二维旋转矩阵容易求出,就是在考虑旋转中心点时需要多下一点心思,具体可以参考此题的Shader/Default.hlsl,在顶点着色器中实现纹理旋转。
  • 10 Chapter 8 Exercise_5: 此题首先需要使用texconv工具将bmp文件转为dds文件,程序运行时每一帧重新指定纹理即可。
  • 11 Chapter 8 Exercise_7: 此题没有难度,主要是对纹理的基础使用,完善后场景也比较丰富。

Chapter 9

  • 12 Chapter 9 BlendDemo: 透明度混合、透明度测试的逻辑都比较简单,最主要的就是状态的判断,还有透明物体通常存在渲染顺序的问题,要注意渲染中绘制物体顺序,才能得到正确的效果。

Chapter 10

  • 13 Chapter 10 StencilDemo: 模板缓冲区十分有趣,很多奇特的效果都可以使用模板缓冲区实现,在这里实现镜面效果只是最简单的使用,但是细节还是存在不少,尤其是渲染状态的切换,需要仔细思考。
  • 14 Chapter 10 Exercise_7: 此题和模板关系不大,只是透明度混合的应用。
  • 15 Chapter 10 Exercise_8: 此题个人认为本章最难习题,因为模板缓冲区的值我们并不能直接读取。在这里基于屏幕后处理实现。首先我们需要在着色器中新建一个常量缓冲区,其中存放我们OM设置的模板参考值;然后我们绘制几何体的时候,让所有物体都能通过模板测试,并且将模板值+1;随后我们基于屏幕后处理,将模板参考值从1-5依次设置,每次只能绘制出对应参考值的像素;同时我们把这个参考值传递给存放模板参考值的常量缓冲区,就可以根据模板参考值的不同绘制出不同的颜色。
  • 16 Chapter 10 Exercise_9: 此题根据题目提示完全可以自写,只是设置一下混合状态、关闭深度测试,这种策略观察over draw的效果比上一题更加明显。
  • 17 Chapter 10 Exercise_10: 这里可以当做模板缓冲区使用方法的一次巩固,类似的这里还将阴影也反射到了镜子中。

Chapter 11

  • 18 Chapter 11 BillboardApp: 广告牌效果只是几何着色器的基础应用,在这里实现也比较简单,主要是注意绘制过程,其中的状态变换较多。
  • 19 Chapter 11 Exercise_1: 此题是集合着色器的简单应用,用线条带绘制一个圆形,每一个线条带有两个顶点,几何着色器输出4个顶点,前2个保持不变,后2个在y轴上进行偏移,即可绘制出一个线条带圆柱。
  • 20 Chapter 11 Exercise_2: 此题一次细分比较简单,但是二次细分的逻辑比较绕,需要多下点心思。
  • 21 Chapter 11 Exercise_3: 此题爆炸效果实现比较简单,让顶点延表面法线扩张即可。
  • 22 Chapter 11 Exercise_4: 在这里顶点还是用三角形组合,但是在几何着色器中让三角形的两个顶点重合,因此看起来就是线段。本质上还是几何着色器拓展顶点。
  • 23 Chapter 11 Exercise_5: 这道题的原理和上一题是一样的,只是输出顶点的位置和数量不同,在这里以三角形的重心坐标输出表面法线。

About

Introduction to 3D Game Programming with DirectX 11 练习题解答

Resources

Stars

1 star

Watchers

1 watching

Forks

Releases

No releases published

Packages

 
 
 

Contributors