java二维矩阵怎么进行转置_法线变换、逆转置、伴随转置

ced42f32f890b99e87d45ec9d280ad04.png

众所周知:

对法线进行变换,需要用变换矩阵M的逆转置,即

这个在lightinghouse上有推导:The Normal Matrix

本文先给一个更直观的推导,然后讲它的局限性和伴随转置。

一,推导

引理:若两向量垂直,其中一个缩放S,另一个缩放

,它们还垂直。

证:设

,a用S缩放得a',b用
缩放得b'。

,
,
,所以

欲解决如下问题:

矩阵M将

变成为
法线为N。求构造矩阵X,将N变换为与
垂直的向量N'。

解:设

(其中
为旋转矩阵,
为缩放矩阵)。

变换过程如下:

38a49b39f7ce34ebe6bde164de92a930.png

现在来构造N到N'的变换过程,根据引理知,只要照抄

的变换过程并将
替换为
,即可保证每步法线都与三角面垂直,从而最终N'与
垂直:

498f7ab091756343264588603a18a30e.png

所以

又因为

(旋转矩阵逆等于转置

,缩放矩阵是对角阵
,所以)

所以

注:

(1)一般情况下不能保证向量经

变换后仍是单位长度,故需进行单位化。

(2)如果

中所有
均为单位阵,即无缩放,则
。即:无缩放时可直接用M作为法线变换矩阵,不用单位化。

(3)如果

中所有
的对角线元素均相等(假设均为
),即等比缩放,则
,所以
,其中系数
会在单位化时消除。所以:只有等比缩放时可直接用M作为法线变换矩阵,需要单位化。或者如果知道缩放系数k的值,用
作为法线变换矩阵,则无需单位化。

二,局限性

前文我们刻意隐瞒了一个问题:如果M不可逆怎么办。

这是有可能的,因为

,虽然其中旋转矩阵
必定可逆,但缩放矩阵
未必可逆。

如果缩放矩阵

对角元素均不为零,则可逆,如
的逆为
,否则不可逆,如
(即将z轴压平)非满秩。

前面的引理“若两向量垂直,其中一个缩放S,另一个缩放

,它们还垂直。”也是需要以S可逆为前提。

所以,用M的逆转置矩阵作为法线变换矩阵是有局限性的。

那么能否构造出对任意M都适用的法线变换矩阵呢?

答案是可以,M的伴随转置矩阵

就符合要求。(注:是从这篇文章中得知的,感谢作者:lxycg:渲染管线中的法线变换矩阵)

实际上,将前面推导过程中的“逆”都替换成“伴随”,稍加修改就能通。

补充:

求伴随矩阵需要计算所有元素的代数余子式,比较繁琐。搜到个在线的伴随矩阵计算器,而且支持符号运算:

伴随矩阵计算器 - Symbolab

b8b61568b5d6f318e9794b2c6b6ac79e.png

三,从逆转置到伴随转置

结论:可以用M的伴随转置作为法线变换矩阵,即

推导:

引理:若两向量垂直,其中一个缩放S,另一个缩放

,它们还垂直。

证:设

,a用S缩放得a',b用
缩放得b'。

,
,
,所以

欲解决如下问题:

矩阵M将

变成为
法线为N。求构造矩阵X,将N变换为与
垂直的向量N'。

解:设

(其中
为旋转矩阵,
为缩放矩阵)。

变换过程如下:

38a49b39f7ce34ebe6bde164de92a930.png

现在来构造N到N'的变换过程,根据引理知,只要照抄

的变换过程并将
替换为
,即可保证每步法线都与三角面垂直,从而最终N'与
垂直:

ac273182a97bfd24aa7909fe5fc0979b.png

所以

又因为

(根据伴随矩阵与逆矩阵关系及旋转矩阵逆等于转置,有

,根据缩放矩阵是对角阵及对角阵的伴随矩阵仍是对角阵,有
,所以)

所以

由于旋转矩阵

均可逆,所以
不为零。

常数因子

会被单位化消除,所以可以舍弃。

故取

即可。

总结:

(1)无论M是否可逆,含有何种缩放,都可以用

作为法线变换矩阵,一般需要单位化。

(2)如果M可逆,无论含有何种缩放,都可以用

作为法线变换矩阵,一般需要单位化。

(3)如果M无缩放,则M必定可逆,可直接用M作为法线变换矩阵,也无需单位化。

(4)如果M只有等比缩放,且不为零矩阵,则M必定可逆,可直接用M作为法线变换矩阵,需要单位化。或者如果知道缩放系数k的值,用

作为法线变换矩阵,则无需单位化。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值