视频链接:https://www.bilibili.com/video/BV1X7411F744?p=4
课程主页链接:http://games-cn.org/intro-graphics/
课件PPT链接:http://games-cn.org/graphics-intro-ppt-video/
1. 3D变换
缩放和平移矩阵
旋转矩阵
欧拉角:roll, pitch, yaw
绕任一轴旋转一定角度:罗德里格斯旋转公式
2. 视图变换:先平移变换到原点 ,再依次将三个轴旋转到对应轴。
求旋转矩阵的方法:先求得逆旋转矩阵(将标准坐标轴旋转到待变换的向量方向),再通过旋转矩阵的正交性,可得旋转矩阵就是逆矩阵的转置。旋转矩阵是正交矩阵的证明:https://blog.csdn.net/qq_41951923/article/details/103540506?utm_medium=distribute.pc_aggpage_search_result.none-task-blog-2allfirst_rank_v2~rank_v25-2-103540506.nonecase
3. 投影变换
两种方式:正交投影和透视投影
4. 正交投影
将长方体范围映射到canonicl 正方体:先平移,后缩放
正交投影变换的公式:
右手定则的一个缺点:因为看向-z,所以近平面的z值从数值上大于远平面,不太符合直观理解,所以Opengl使用的是左手坐标系
5. 透视投影
- 使用最广泛
- 近大远小
- 平行线不再平行,会汇聚在某一点
6. 如何做透视投影
- 先将视锥体变换到cuboid长方体
- 对长方体做正交投影
7. 如何求得透视投影的变换矩阵
- 先求得y和x的公式
- 再根据y和x推导出变换矩阵的部分项
- 再根据特殊的点(近平面和远平面的点)求得变换矩阵其他的项
8. 引申:透视除法
之前的运算中可以看到利用其次坐标,进行了乘z的操作来消除z对矩阵的影响,这也是为什么在渲染管线中存在透视除法这个操作。
我个人理解就是如果没有透视除法这步骤,那就无法用一个矩阵代表该摄像机的透视矩阵,因为该矩阵会和每个点的z值相关。如果没有透视除法,那就需要在进行透视矩阵相乘时,对矩阵的每一项除以z
https://www.tomdalling.com/blog/modern-opengl/explaining-homogenous-coordinates-and-projective-geometry/