Skip to content

Latest commit

 

History

History
125 lines (86 loc) · 2.97 KB

File metadata and controls

125 lines (86 loc) · 2.97 KB

三维空间的基本旋转

rotation

三维空间有三种基本的旋转,分别为绕三个轴的旋转。上图展示了绕三个轴旋转的正方向。z轴垂直于屏幕(或渲染图片)向外。

绕三个轴旋转45度效果

绕z轴旋转

绕z轴旋转时,z坐标保持不变。x,y坐标的旋转方式和2D空间相同。

写成矩阵形式:

rotate z

绕y轴旋转

绕y轴旋转的时候,y坐标保持不变。xoz 平面上旋转的正方向于xoy平面的正方向正好相反。

rotate y

类比于xoy平面,那么绕y轴顺时针旋转$\alpha$就相当于逆时针旋转$-\alpha$,其公式如下:

因为cos 为偶函数,sin为奇函数:

绕x轴旋转

绕x轴旋转的时候,x坐标保持不变。

为了类比绕z旋转,让我们把x轴翻转一下:

写成矩阵的形式:

法向量变换矩阵

光线的方向是(1,1,1),仔细观察Fig. 2 会发现光影有点不对。Fig.2 中的小牛的左侧应该没有这么黑。

这是因为,在着色的过程中法向量没有做相应的变换。也就是说渲染的模型是变换后的模型,但是用到的每个面的法向量确是变换前的法向量。

那么是否可以对法向量应用同一个变换矩阵呢?

上图中,左边的矩形经过一个剪切变换(shear)得到右边的四边形。左边矩形的右边的法向量(1,0),经过同样的变化后得到(1,1),不再是变换后的四边形右边的法向量了。

实际上,要找到变换后的法向量,只需要用法向量乘以变换的矩阵的逆矩阵的转置矩阵即可。

cargo run --example transform_3d_normal_transform