OpenGL:矩阵
矩阵基础知识#
在具体描述如何构建模型矩阵、观察矩阵和投影矩阵之前,我们在这一节先介绍矩阵的各种基础知识(只介绍需要用到的知识)。
矩阵的基本含义#
由
值得注意的是有一些特殊的矩阵:
- 当
时,即矩阵 的行数和列数相等时被称为方阵。 - 当方阵的所有元素中除了对角元素的其余元素为0时,被称为对角矩阵。
- 当对角矩阵的对角元素都为1时,被称为单位矩阵(
)。 - 当方阵满足
时,被称为对称矩阵。
矩阵的运算#
矩阵与标量的乘法:矩阵中每个元素与标量相乘
矩阵加法:只有两个矩阵的维度一致时才能进行加法
根据公式也可以推导得到:
. .
矩阵减法:可以进行如下简单变换
矩阵乘法:矩阵乘法是有顺序的,只有第一个矩阵的列数与第二个矩阵的行数相等时才能进行乘法运算,即
可以发现矩阵的乘法就是
根据公式可以推导出:
- 矩阵乘法不满足交换律!
转置:即将矩阵的翻转
可以看到一个m行n列的矩阵转置后变成了一个n行m列的矩阵。我们也可以说对称矩阵即其转置等于本身的矩阵:
有时候矩阵的转置也写为:
由公式可以推导:
矩阵变换#
齐次坐标#
假设目前在三维坐标中存在某个顶点
平移变换#
现在期望将顶点
此时对于原始顶点的齐次坐标
我们就得到了新的顶点的齐次坐标
缩放变换#
现在期望针对顶点
此时对于原始顶点的齐次坐标
我们就得到了新的顶点的齐次坐标
旋转变换#
我们直接考虑三维坐标旋转(相对于原点),由于对每个轴的旋转不一样,我们分别讨论绕x、y和z轴旋转的变换矩阵:
绕x轴逆时针旋转 #
如上图所示,点
旋转后的点
因此绕x轴逆时针旋转
绕y轴逆时针旋转 #
如上图所示,点
旋转后的点
因此绕y轴逆时针旋转
绕z轴逆时针旋转 #
如上图所示,点
旋转后的点
因此绕y轴逆时针旋转
矩阵的组合#
使用矩阵进行变换的真正力量在于,根据矩阵之间的乘法,我们可以把多个变换组合到一个矩阵中。让我们看看我们是否能生成一个变换矩阵,让它组合多个变换。假设我们有一个顶点
注意,当矩阵相乘时我们先写位移再写缩放变换的。矩阵乘法是不遵守交换律的,这意味着它们的顺序很重要。当矩阵相乘时,在最右边的矩阵是第一个与向量相乘的,所以你应该从右向左读这个乘法。建议您在组合矩阵时,先进行缩放操作,然后是旋转,最后才是位移,否则它们会(消极地)互相影响。比如,如果你先位移再缩放,位移的向量也会同样被缩放(译注:比如向某方向移动2米,2米也许会被缩放成1米)!
作者:Warren-j1an
出处:https://www.cnblogs.com/warren-j1an/p/18244434
版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通