“ 在几何计算、图形渲染、动画、游戏开发等领域,常需要进行元素的平移、旋转、缩放等操作,一种广泛应用且简便的方法是使用仿射变换进行处理。相关的概念还有欧拉角、四元数等,四元数在图形学中主要用于解决旋转问题,特别是在三维空间中绕任意轴的旋转,且四元数与仿射变换可以相互转换。”
上一篇我们介绍了仿射变换矩阵原理、构成和转换:图形几何之美系列:仿射变换矩阵。
本篇我们继续进行探索,包括左乘还是右乘、左手/右手坐标系、先转后偏等内容。
1. 左乘还是右乘
通过前文(图形几何之美系列:仿射变换矩阵)办法构造的仿射变换矩阵作用于点和向量时是左乘,且如果有多次姿态变换时,需要依次将对应的仿射变换矩阵左乘于点或向量。
如物体Object依次经过旋转、偏移、绕点P缩放姿态变换,对应的仿射变换矩阵分别为TrsRotate、TrsTrans、TrsScaleBaseP,其数学表达如下,
可以右乘吗?在把点或向量看作1X4矩阵时,可以右乘4X4的仿射变换矩阵吗?答案是可以,但需要更改4X4矩阵的构造,对其进行转置。
1. 一般我们不采用右乘的方案,你可以简单的认为是业界如此,需要制定清晰和明确的规则,方便大家学习和执行。
2. 就像在世界各国汽车要靠右侧或左侧行驶一样,需要制定明确清晰的规则,方便大家学习和遵守,如果都可以,那道路将无法畅通。
2. 右手坐标系&左手坐标系
仿射变换矩阵和左手或右手坐标系有关系吗?或者只能应用于右手坐标系吗?
仿射变换矩阵和左右手坐标系没有关联关系,其应用也没有局限于此,甚至可以将左手坐标系的物体转换为右手坐标系下的度量,只要你愿意。
提示
1. 通过修改4X4矩阵中左上角的3个列向量即可进行左右手坐标系间的转换,比如当左手坐标系相对于目标右手坐标系仅存在X轴方向反向时,可以将X轴基向量baseX取反即可得到到目标右手坐标系的仿射变换矩阵。
2. 这其实和局部坐标系转为世界坐标系是类似的,可以认为左手坐标系是局部坐标系,而目标右手坐标系是世界坐标系。
3. 即使实际情况比较复杂,也可以基于上述章节中仿射变换矩阵构成和原理进行矩阵的构造。
4. 镜像变换也是类似的原理。
3. 先转后偏
如果一次变换中存在多种类型的姿态变换,需要先构造矩阵左上角的3X3部分(缩放、旋转、镜像、非均匀变换),最后再叠加偏移。
如果先偏移,则需要基于偏移值的坐标点进行矩阵左上角3X3部分的构造,这将变得复杂的多,这对于大多数人来说不可接受,毕竟我们很多时候要做的是化繁为简,同时提高精度。
如上图所示,我们对点P进行仿射变换,同时包含旋转和平移,即绕点T旋转Θ,然后平移向量P'P''。
如果是先旋转后偏移:(1)P绕T旋转θ;(2)移动P'P'';即可得到最终姿态P''。
补充
构造P绕T旋转θ的仿射变换矩阵时:
可以先构造偏移TO的偏移矩阵(这样T偏移到了原点,而P可以绕原点旋转了)TrsT2O;
然后构造P绕原点旋转θ的3X3矩阵,再叠加OT偏移得到TrsRotate_and_O2T;嘿嘿,这又是一个先转后偏的实践。
左乘上述两个矩阵得到结果矩阵:TrsRotate_and_O2T x TrsT2O。
如果是先偏后转,问题将变得复杂,在偏移P的同时需要对T也作相同力度的偏移,没错,进行“先偏”操作时,你需要关心其他姿态变换元素,如“绕T旋转的元素T”;然后再绕T'点旋转θ。
记住,我们是要化繁为简,以清晰便捷的过程去处理问题,这会降低错误的发生,也降低了学习成本,提高学习工作体验。
谁不愿意开心的学习和工作呢?对,还有开心的生活~
注意,如果同时有旋转、缩放、镜像、不均匀变换时(如透视投影)时,这几种姿态变换没有先后顺序的要求,你可以先转后缩,也可以先缩后转。想一想4x4矩阵的构造,这几种类型都是左上角3x3部分,该部分3列实际上是三个基向量。
欢迎关注,图形几何之美系列 将继续更新......
-
图形几何之美系列:三维实体结构表达
-
图形几何之美系列:仿射变换矩阵
-
图形几何之美系列:仿射变换矩阵(二)
4.写在后面
图形几何、数据处理、并行计算相关研究和研发,公众号:geometrylib,欢迎交流。
_________哈市雪花__________