1. 矩阵在 3D 空间中的作用
(1) 如果方框 A 想绕 (10,3,4) 旋转 50°,沿 x 方向放大 2 倍,沿 (9,-1,8) 方向平移 2 个单位,那么经过上述变换后,新方框各点的坐标是什么?应用程序矩阵使找出答案变得容易。
(2) 知道子坐标系在父坐标系中的位置,就可以在父坐标系中找到店铺在子坐标系中的位置。
2. 矩阵的基础知识
矩阵可以描述任意线性变换。线性变换保留直线和平行线,而线性变换保留直线,其他几何属性(如长度、角度、面积和体积)可能会因变换而改变。简单地说,线性变换可以 “拉伸” 坐标系,但不能 “弯曲” 或 “滚动” 坐标系。
(1) 翻译
以下矩阵可用于沿 t 向量的方向平移点:
(2) 旋转
正方向是从旋转轴向前方向的逆时针方向,例如绕 z 轴旋转 [0,0,1],正方向是 x 到 y 轴的方向
知道绕三个轴旋转后的旋转矩阵,以下是围绕任意向量获得的矩阵。设 M 为单位矩阵被向量 a 旋转后的矩阵,a = (xa,ya游戏引擎架构, za),旋转角度为 α,则
M=
不要问为什么,只要记住。
(3) 缩放
如果缩放点为 r,X 轴缩放 sx3D道具,y 轴缩放 sx,Z 轴缩放 sz,则新坐标为:
(4) 全面
例如,您想要平移坐标系 [2,3,4] 中的所有点(X 轴上 2 个,Y 轴上 3 个,Z 轴上 4 个)。
绕 z 轴旋转 90°
x、y 和 z 轴均放大 2 倍
生成的转换矩阵为
注: 缩放不仅仅是乘以 sx、sy 和 sz 位置,而且该轴的模数就是缩放值
生成的转换矩阵
它不等于乘法
3. 子空间到父空间的转换
一个
将点或方向从任何子坐标系 C 转换为父坐标系 P 的矩阵游戏引擎架构,该矩阵可以写为 Mc-p。此矩阵表示点或方向从子空间到父空间的转换。以下公式将任何子空间位置向量 Pc 转换为父空间位置向量 Pp,其中 Pp = PcMc-p
Mc-p =
4. 坐标系中点的 RST (Rotational Translational Scaling)
OpenGl 超级图书第四版的第 P101 页说:如果一个 4×4 矩阵包含不同坐标系的位置和方向(可以看作是上面的 Mc-p),那么将一个顶点 Pp 乘以这个矩阵将导致一个新的顶点 Pc 转换为该坐标系(坐标仍然是相对于原始坐标系的)。这看起来像公式 Pc = Pp Mc-p,错、错、错!这样用 Pp 就完全误导了,把 Pp 的名字改成 A程序开发,坐标 V,因为是线性变换,所以 A 在新坐标系下的坐标还是 V,所以这与 Pp = PcMc-p 是一致的,而 Pp 是 A 在新坐标系 V 在原坐标系下的坐标。
5. OpenGl 中的矩阵变换
这
OpenGL 中矩阵的转换是叠加的,每次进行矩阵转换时,零点都会移动到新的坐标系。下一个变换仅影响当前坐标系及其子坐标系,而不会影响其父坐标系。加载单位矩阵是将零点重置为原始零点。
简单的矩阵运算不会移动零位置,因此将其与单位矩阵相乘没有效果。
参考:
1. OpenGl 超级图书第 4 版 P101
2. 游戏引擎架构 P151