三维空间有三种基本的旋转,分别为绕三个轴的旋转。上图展示了绕三个轴旋转的正方向。z轴垂直于屏幕(或渲染图片)向外。
绕三个轴旋转45度效果
绕z轴旋转时,z坐标保持不变。x,y坐标的旋转方式和2D空间相同。
写成矩阵形式:
绕y轴旋转的时候,y坐标保持不变。xoz 平面上旋转的正方向于xoy平面的正方向正好相反。
类比于xoy平面,那么绕y轴顺时针旋转
因为cos 为偶函数,sin为奇函数:
绕x轴旋转的时候,x坐标保持不变。
为了类比绕z旋转,让我们把x轴翻转一下:
写成矩阵的形式:
光线的方向是(1,1,1),仔细观察Fig. 2 会发现光影有点不对。Fig.2 中的小牛的左侧应该没有这么黑。
这是因为,在着色的过程中法向量没有做相应的变换。也就是说渲染的模型是变换后的模型,但是用到的每个面的法向量确是变换前的法向量。
那么是否可以对法向量应用同一个变换矩阵呢?
上图中,左边的矩形经过一个剪切变换(shear)得到右边的四边形。左边矩形的右边的法向量(1,0),经过同样的变化后得到(1,1),不再是变换后的四边形右边的法向量了。
实际上,要找到变换后的法向量,只需要用法向量乘以变换的矩阵的逆矩阵的转置矩阵即可。
cargo run --example transform_3d_normal_transform