D3D中关于各个空间的介绍

最近在看几何着色器,才发现自己对顶点的变换过程又忘光了,赶紧找出书来复习…

下面是我的一些笔记

一、观察空间

为了生存场景的2D图像,在场景中放置一个摄像机,摄像机指定了用户能看到的区域。在摄像机上附加局部坐标系,称之为观察空间或者摄像机空间。附加的坐标系,我们一如既往使用矩阵表示坐标系。最后通过操纵矩阵从而操纵摄像机。

观察空间到世界空间的变换矩阵(别看错了~)是这样子的

W = Ux , Uy , Uz , 0,

       Vx , Vy , Vz , 0,

       WX, Wy, Wx, 0,

       Qx , Qy , Qz , 1

那么从世界空间到观察空间的矩阵就是W的逆矩阵啦。

W-1  = Ux , Vx , Wx , 0,

            Uy , Vy , Wy , 0,

            Uz,  Vz,  Wz, 0,

            Q·u , Q·v , Q·w , 1

Q系列是摄像机的pos,U是摄像机的x轴,V是摄像机的y轴,W是摄像机的z轴的齐次坐标。

那为什么要进行坐标变换呢?千辛万苦把世界坐标变成观察坐标,这个嘛,我也不知道。(据书里记载,使用观察坐标描述顶点,比使用世界坐标描述顶点,要方便得多)构造出来变换矩阵之后,只要将相应的世界坐标乘与变换矩阵,就完成了不同空间的坐标变换了。

其实说了那么多,只要用一条D3D函数就可以实现了…

提供观察点,摄像机位置,摄像机坐标系的向上方向即可构造出观察矩阵。

image

二、投影与齐次裁剪空间

在上面定义了摄像机之后,还需要定义合理的摄像机取景范围。可以使用“平头截体”完成这个功能。所谓的平头截体就是定义能看到的最远距离,最近距离,视域角。之后计算三角形,把摄像机的空间的坐标转化为投影窗口的坐标。具体过程如下图:

image

把y点变成y’点 x点变成x'点。深度值z保留并规范化,为下面阶段的深度操作使用。(都是很基础的平面几何知识)

注意:在进行坐标变换的时候,我们使用规范化设备(NDC)坐标。中间还有很多矩阵变换我不想列出来了, = =其实说了那么多,一个D3D函数就可以搞定了..

image

image

使用该条函数后,执行观察投影变换,规范化坐标,透视除法步骤一步到位。

三、世界空间,局部空间

这两个空间是最好理解的,所以不写那么多笔记了..

世界矩阵

W = Ux , Uy , Uz , 0,

       Vx , Vy , Vz , 0,

       WX, Wy, Wx, 0,

       Cx , Cy , Cz , 1

C系列是物体局部坐标系的pos,U是物体局部坐标系的x轴,V是物体局部坐标系的y轴,W是物体局部坐标系的z轴的坐标。

原文地址:https://www.cnblogs.com/CAION/p/2950291.html