码迷,mamicode.com
首页 > 其他好文 > 详细

图形学变换矩阵的分解

时间:2021-01-01 12:07:10      阅读:0      评论:0      收藏:0      [点我收藏+]

标签:它的   导出   需要   code   旋转矩阵   begin   假设   loading   image   

最近有一个需求是已知一个变换矩阵,如何根据该矩阵获取它的位移、旋转和缩放参数?
这个问题当初书里没直接讲,但是可以通过已有的知识推导出来。
首先我们知道,图形学中的变换一般有三种:缩放、旋转和位移,它们均可以用4*4的方阵予以表达。
比如缩放矩阵的形式如下:
\(\begin{bmatrix} sx & 0 & 0 & 0 \\ 0 & sy & 0 & 0 \\ 0 & 0 & sz & 0 \\ 0 & 0 & 0 & 1 \end{bmatrix}\)
位移矩阵的形式如下:
\(\begin{bmatrix} 1 & 0 & 0 & tx \\ 0 & 1 & 0 & ty \\ 0 & 0 & 1 & tz \\ 0 & 0 & 0 & 1 \end{bmatrix}\)
旋转矩阵则比较复杂,绕着uvw轴(两两正交且长度为1)转θ的矩阵如下:
技术图片

我们又知道,在图形学中,可以通过矩阵相乘的方式来将各种变换操作叠加,常见的就是SRT,也就是将缩放、旋转、平移三个矩阵乘在一起组合为新矩阵,用以表达一个物体总的变换。
那么,假设我们已知一个SRT矩阵,又该如何分解出其中的S、R和T呢?
其实仔细想一下也是比较简单的,首先平移的部分始终位于矩阵的最后一列,可直接取出:

技术图片

接下来,该矩阵的3*3部分是SR矩阵相乘的结果,我们又该如何进一步提取呢?
回想一下,三维旋转矩阵本身需要满足正交矩阵的性质,也就是它的每一行和每一列长度均要为1,我们可以从这一点入手,计算出该矩阵SR部分每一行的长度,它就一定是x、y、z轴的缩放!
然后再将SR部分的每一行除以sx、sy、sz就可以得到R矩阵了!

图形学变换矩阵的分解

标签:它的   导出   需要   code   旋转矩阵   begin   假设   loading   image   

原文地址:https://www.cnblogs.com/wickedpriest/p/14198547.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!