24-空间变换—三维
Created|Updated|图形学工程&工业仿真1-图形学,从0构建一个opengl软光栅
|Post Views:
三维坐标系类型

三维坐标系基向量(X/Y/Z) 根据排列不同,分为左手坐标系与右手坐标系,OPengl采用的是右手坐标系
三维变换
三维空间变换是三维向量与3*3矩阵的关系,由于存在平移变换需求,也需要增加一个维度,变为四维

平移矩阵与缩放矩阵
平移与缩放,二维和三维差不多,只是增加了矩阵维度

旋转矩阵
对于三维空间的旋转,并不是围绕一个点,而是围绕一个旋转中心轴,最简单的三维旋转就是分别绕三个基向量(x/y/z轴)进行旋转
旋转规则
对于绕某个轴旋转时,是指逆着当前轴看过去,让该轴正指向自己,逆时针旋转角度

对照二维旋转
二维旋转可以理解为任意两个相互垂直的向量作为坐标轴,逆时针旋转某一角度的结果

三维旋转按照X/Y/Z旋转,可以看作让某两个轴作为上面的i与j
绕Z轴旋转

构造出如下旋转矩阵:

绕X轴旋转

构造出如下旋转矩阵:

绕Y轴旋转


构造出如下旋转矩阵:

总结

Author: LYJ
Copyright Notice: All articles on this blog are licensed under CC BY-NC-SA 4.0 unless otherwise stated.
Related Articles
2025-08-31
23-空间变换—二维
矩阵与向量相乘的含义 如图,矩阵与向量相乘得到新的向量,这个向量有自己的坐标,可以理解为一个点的位置坐标,那这个相乘得到的坐标代表了什么? 可以观察到矩阵可以对坐标进行变换,从而得到缩放后的坐标,那是否可以实现对坐标绕某个点旋转或者平移的变换呢? 二维旋转如何设计矩阵来乘以坐标,实现将左图旋转得到右图的效果? 设计旋转矩阵: 求ABCD: 使用原来(1,0)的点可以得到A C 使用原来(0,1)的点可以得到B D 最终得到旋转矩阵: 二维平移如何设计矩阵乘以坐标实现将左图平移到右图的效果? 最直观的做法就是坐标直接加上平移数值 但是将其纳入空间变换这个计算系统中有些突兀,能不能就继续使用乘法来实现平移变换? 齐次坐标 为了实现可通过矩阵相乘得到平移变换后的坐标,引入了齐次坐标的概念: (1)给二维矩阵添加一个标识维度,1表示当前矩阵为点,0表示当前矩阵为向量。 (2)将第三列前两行元素设置为需要平移的x,y值 当表示点时: 当表示向量时: 二维空间变换矩阵总结: 缩放矩阵: 旋转矩阵: 平移矩阵: 变换矩阵的使用需...
2025-09-02
25-空间变换—任意轴旋转
回顾列视图矩阵 理解:向量P由矩阵的三个列向量分别乘以向量x/y/z 的分量后,再加和得到;列向量形成的矩阵可理解为x/y/z的权重因子,它影响着向量P的指向与长度。 旋转的几何理解对于任意的旋转操作矩阵,假设存在以下计算: 由矩阵列视图可看作: 理解: 旋转变换矩阵,内部的三个列向量就是新坐标系R的三个基向量,按序对应与X/Y/Z轴;P相对于新坐标系R的位置不变,通过对R的基向量进行加权加和,就可以计算变动后的P的原坐标系位置;也可理解为把原来的坐标系进行旋转得到新的坐标系R,P跟着一起旋转,但是相对于R位置不变 旋转的几何理解——延申如果已知一个旋转矩阵A,可以通过与基向量相乘,求出每一列 令其与x/y/z轴向量分别相乘,即可求出对应列 绕任意轴旋转推导已知旋转轴为u,v围绕旋转角,得到v`,求v`的坐标表示 思路:(先保证向量u是归一化后的单位向量) 求向量v在向量u上的投影向量 v平行向量: 求垂直向量u的向量 v垂直向量: 观察顶部截面,需要求v ...
2025-09-03
26-空间变换—视图变换
摄像机定义在渲染技术中,如果坐标系确定以及物体都已经摆放完毕的情况下,需要确定一台摄像机,描述观察者的参数 摄像机相关参数: 1、摄像机位置 2、摄像机看向的方向 3、摄像机穹顶方向 4、摄像机视张角: 模拟人的眼睛张开的角度,在屏幕上显示的效果就是显示图像局部或整体的样子 摄像机初始状态我们的目标是确定摄像机当前看到的场景,即观察者在摄像机的位置,看向的方向 最简单的情况如下,摄像机就在坐标原点 摄像机相关参数:1、摄像机位置摆放在坐标系原点2、摄像机看向的方向是负Z轴方向此时可以直接进行投影计算操作,所有舞台沿Z轴投影到摄像机的幕布上,相对简单 摄像机变化状态如果摄像机经过旋转平移等操作,变成如下形态: 此时由于摄像机离开了原点,且旋转,无法沿着Z轴投影,需要把摄像机“恢复”到原点,并且看向-Z轴 如下图,可通过施加旋转变换矩阵和平移变换矩阵恢复到原点 摄像机变换——逆变换已知摄像机是由R与T结合的,所以最终变换矩阵为M=T*R(注意变换顺序) 逆变换: M矩阵的逆矩阵可以把摄像机从变换后的状态“恢复”到初始化的状态 相对不变准则思路:...
2025-09-05
28-空间变换—代码实现
mathFunction.cpp//空间变换功能 //scale translate rotate //变换操作作用于某一组坐标基,即变换是在当前模型坐标系内 //第一个参数是哪个矩阵操作(即当前模型坐标系) //随后即各自相关参数 template<typename T, typename V> Matrix44<T> scale(const Matrix44<T>& src, V x, V y, V z) { Matrix44<T> result; auto col0 = src.getColum(0); auto col1 = src.getColum(1); auto col2 = src.getColum(2); auto col3 = src.getColum(3); col0 *= x; col1 *= y; col2 *= z; result.setColum(col0, 0); result.setColum(col1, 1)...
2025-09-04
27-空间变换—变换矩阵的本质
详解基向量空间中的一组线性无关向量,即可构成一组基向量点P的坐标只有放在某一个基向量构成的坐标系中才会有意义 局部坐标系与世界坐标系世界坐标系: 定义一组线性无关/模为1/互相垂直的向量,作为整个世界的中心坐标系(笛卡尔坐标系) 局部(模型)坐标系: 对世界坐标系的三个基向量进行变换后,得到的坐标系(一开始与世界坐标系重合) 点P局部坐标与世界坐标世界坐标: 点P在世界坐标系中的坐标局部(模型)坐标: 在转换后新形成的一组基向量构建的坐标系中点P的坐标 P初始状态下,其局部坐标系与世界坐标系重合; P当前在世界/局部坐标系中的坐标为(a,b,c); 经过旋转变换后, P的局部坐标系跟随旋转,变成了旋转矩阵的三个列向量, P在局部(模型)坐标系中的坐标仍是(a,b,c), P在世界坐标系中的坐标为: 变换矩阵的相互作用举例: 先使用S矩阵对坐标进行缩放,再使用R对其进行旋转 根据矩阵运算结合律,可以先把S与R相乘,再集体作用到目标点;二者相乘得到如下的矩阵M 根据列视图可知S矩阵的每一列,都会作为一组调配因子...
Announcement
This is Seagull Blog
Post Series
