Direct X 12 – First Person Camera And Dynamic Indexing 第一人称摄像机与动态索引

在本章节中,我们将学习两个知识点。首先,我们将设计一个camera系统,其表现形式与FPS游戏中的camera类似。在之后的demo中,我们将使用这个camera系统来代替之前的camear。之后,我们将学习一种新的DX12技术,其被称为动态索引(dynamic indexing,其在shader model 5.1中被引入)并且支持通过索引来读取一组贴图数据(Texture2D gDiffuseMap[n])。其类似于第12章中的贴图数组对象(Texture2DArray),但是不同于Texture2DArray,新的动态索引技术可以将不同尺寸不同格式的贴图存储在一个贴图数组中,很明显该技术的灵活性远高于Texture2DArray。

目标:

1. 复习camera坐标系矩阵的数学原理。

2. 了解第一人称下的camera的功能。

3. 实现第一人称下的camera。

4. 学习如何通过动态索引读取贴图数组中的元素。

15.1 复习camera坐标系矩阵

camera坐标系如下图所示。camear位于坐标原点,其正方向为z轴正方向,x轴的正方向表示camera的右方向,而y轴的正方向表示camera的正上方向。在渲染管线中,我们将场景中物体的坐标系转换为camera坐标系而不是世界坐标系,而这个转换被称为view transform,其相应的矩阵被称为view matrix

如果Qw=(Qx,Qy,Qz,1),Uw=(Ux,Uy,Uz,0),Vw=(Vx,Vy,Vz,0),Ww=(Wx,Wy,Wz,0)分别表示camera坐标系基于世界坐标系的原点,x轴,y轴,z轴,那么从camera坐标系转换到世界坐标系的矩阵为:

然而,我们需要的转换正好与上述矩阵相反,是由世界坐标系转换至camera坐标系。因此W的逆矩阵是我们需要的矩阵。

一般来说,世界坐标系与camear坐标系的转换只关系到,位置与朝向变化,为了让等式更为简洁,我们将其简化为W=RT(例如,世界坐标系由旋转与位移组成)。这也将使逆矩阵的计算更为简便:

求出的矩阵V就是我们需要的camera坐标系矩阵。而这个坐标系转换,并不会移动场景中的物体。

留下评论

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据