最近在看几何着色器,才发现自己对顶点的变换过程又忘光了,赶紧找出书来复习…
下面是我的一些笔记
一、观察空间
为了生存场景的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函数就可以实现了…
提供观察点,摄像机位置,摄像机坐标系的向上方向即可构造出观察矩阵。
二、投影与齐次裁剪空间
在上面定义了摄像机之后,还需要定义合理的摄像机取景范围。可以使用“平头截体”完成这个功能。所谓的平头截体就是定义能看到的最远距离,最近距离,视域角。之后计算三角形,把摄像机的空间的坐标转化为投影窗口的坐标。具体过程如下图:
把y点变成y’点 x点变成x'点。深度值z保留并规范化,为下面阶段的深度操作使用。(都是很基础的平面几何知识)
注意:在进行坐标变换的时候,我们使用规范化设备(NDC)坐标。中间还有很多矩阵变换我不想列出来了, = =其实说了那么多,一个D3D函数就可以搞定了..
使用该条函数后,执行观察投影变换,规范化坐标,透视除法步骤一步到位。
三、世界空间,局部空间
这两个空间是最好理解的,所以不写那么多笔记了..
世界矩阵
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轴的坐标。