Lecture4:Transformation Cont.
- 这节课比较困难!
- 对于上节课的补充
- 要旋转-θ角度怎么办?
- 实际上就是做了旋转θ角度的转置
- 而实际上也应该是旋转θ角度的逆
- 所以得到旋转矩阵的逆等于旋转矩阵的转置
- 今日内容·
- 继续3D变换
- 观测变换
- 视图变换
- 两种投影变换(正交&透视)
3D变换
- 先线性变换再平移
- 绕某一固定轴旋转
- 绕y轴旋转右上左下两个sin值与其他两个相反
- 因为z叉乘x,可以得到y
- 绕y轴旋转右上左下两个sin值与其他两个相反
- 3D旋转
- 绕任意轴的旋转可以写成绕三个轴的旋转的组合
- 引入欧拉角的概念,并证明其合理性
- 罗德里格斯旋转公式
- 这一公式的推导见附件
- 涉及3D旋转,有四元数这一概念,其引入更多是为了旋转与旋转之间的插值。
Viewing transformation
View / Camera Transformation
- 什么是视图变换?
- 思考一下怎么拍一张照片:MPV三步
- 思考一下怎么拍一张照片:MPV三步
- 怎么做视图变换?
- 如何确定一个相机的摆放?
- 相机位置
- 视线方向
- 向上方向
- 移动物体和移动相机可以造成一样的效果
- 约定俗成,相机在原点,向-z看,向上方向为y
- 如何把相机放到标准位置?
- 上图是思路,写成矩阵形式:
- 先平移、再旋转,同时在旋转的时候利用旋转矩阵逆矩阵和转置矩阵相同的性质
- 视图变换小总结
- 如何确定一个相机的摆放?
Projection Transformation
- 两种投影方式:正交和透视
Orthographic Transformation
- 简单的理解方式:
- 相机还是老样子三件事
- 单纯丢掉 Z 坐标 (之后讲用深度缓冲区分前后)
- scale到[-1,1]平方的矩形上
- 方便且正式的做法
- 定义一个[-1,1]三次方的立方体,把任意空间中的长方体映射成这样一个正方体 ,特殊地,z值上远小于近,因为我没沿着-z方向看(最后视口变换还会拉伸回来,所以不用考虑物体最后会扭曲地展现)
- 把正交投影写成数学形式:
- 实际上OpenGL采用右手系
Perspective Transformation
- 准备推导
- 透视投影的理解
- “挤捏 ”
- 近、远平面永远不变
- 中心点永远不变
- 对于y值
- x与y同理,z不知道
- 推导各行的各项,还差第三行
- 利用近远平面的z值都不会发生变化
- 乘n的这一步并不是为了构造n平方,而是为了满足上上图的第1、3、4项。由上图我们可知只需求A,B两值
- 再利用远平面上的原点(任意一点也可)
- 最后解出来A和B
- 那么对于中点的一点呢,思考题
- 更靠近远平面f,代入算一下就知道咯
- 用Mpersp->ortho(x y (n+f)/2 1)T,得到的结果为(nx ny 1/2(n2+f2) (n+f)/2)T,进行齐次坐标变换,都除以(n+f)/2,得到(2nx/(n+f) 2ny/(n+f) (n2+f2)/(n+f) 1)T,然后把(n2+f2)/(n+f)与(n+f)/2进行比较,两个相减,得到(n-f)2/2(n+f),(n-f)2>0,(n+f)<0,所以结果<0,z变小了,被推向远的平面。摘自课程作业论坛
- 那么对于中点的一点呢,思考题