[Shader]求教:矩阵求逆的几何意义

时间:2022-04-24 19:38:45
平时使用Shader的过程中,发现好多范例中都涉及到了矩阵求逆的操作,最常见的比如:viewInverse(摄影逆矩阵)。
请教大家,一般情况下,在Shader中使用原有矩阵的逆矩阵,通常是要实现什么效果?矩阵求逆有着怎样的几何意义?
PS:感觉Shader的主要工作,其实就是利用GPU完成了一系列的矩阵运算(向量运算应该属矩阵运算的特例),但自己3D数学功底并不是很好。现在用Shader大多是通过封装别人的算法来实现自己的效果,感觉不灵活,大家有什么这方面的学习经验也请一并指教。感激不尽~

11 个解决方案

#1


shader的话,数学是必须要求,而且要求还比较高,这个除了去学习,没办法。
原矩阵与逆矩阵相乘为单位矩阵。其实说多了还是没什么用,都是些数学法则。主要还是要弄懂数学。而且矩阵运算算是最基本的知识了,以后到微分几何时候,你就知道什么叫“刺激”了。
加油吧!

#2


矩阵是基础知识。 

#3


比如你做shadow map 的话,就会遇到一系列矩阵的问题,当你把这些问题解决后,关于OGL中的坐标变换都会弄得比较清楚的。

#4


楼上几位都只说很重要,没回答问题。

点p,矩阵m,
p' = p * m;

p = p' * m~;

不知这样写,你是不是就很明白了。

#5


引用 4 楼 higter 的回复:
楼上几位都只说很重要,没回答问题。
点p,矩阵m,
p' = p * m;
p = p' * m~;
不知这样写,你是不是就很明白了。

非常感谢您的解答!
意思是逆矩阵的几何意义在于撤销原矩阵所带来的变换效果吧?
就好比假定M代表摄影矩阵,则p点经M变换得到p'点;而此时如果想要由p'反推得到p的话,就用到了viewInverse,是这样理解吗?

#6


引用 3 楼 peng_weida 的回复:
比如你做shadow map 的话,就会遇到一系列矩阵的问题,当你把这些问题解决后,关于OGL中的坐标变换都会弄得比较清楚的。

同样感谢1、2、3L三位高人的解答。
尤其是3L,您提供了一个很好的3D数学钻研方向,再次表示感谢~
最近在看《3D数学基础》这本书,打算从基础开始,好好克服一下自己的软肋。
大家关于3D数学学习这方面还有什么好的方法或者建议吗?恳请一并赐教~
感激不尽~

#7


变换矩阵m 左乘 顶点p, 就将p从一个坐标系变换到另一个坐标系
关于矩阵变换,主要是线性代数中的矩阵乘法。
关于3D数学知识的学习,没必要刻意去学吧(个人认为),要用到什么再学什么,不然很盲目。当然,这要看个人的情况。

#8


p*M = p‘

假设M的逆是T
那么 p'*T = p

这种一般用来反推位置之类的

#9


变换矩阵m, 逆矩阵m'(假设存在), 点P在A坐标系下的坐标Pa, 在B坐标系下的坐标Pb
如果 m * Pa = Pb
则   m'* Pb = Pa 

#10


3D数学基础,学会了的标准是自己有能力封装个3DVector类。
矢量的运算,加减乘除。。。。全都可以完成。

参考别人的代码,自己动手实践下吧。

很有意义。

#11


楼主问这样的问题,看来是没有理解图形管线的原理

顶点坐标传入shader中的是在模型坐标系下的坐标,如果需要在其他坐标系下计算,那么就要转换到对应的坐标下。

#1


shader的话,数学是必须要求,而且要求还比较高,这个除了去学习,没办法。
原矩阵与逆矩阵相乘为单位矩阵。其实说多了还是没什么用,都是些数学法则。主要还是要弄懂数学。而且矩阵运算算是最基本的知识了,以后到微分几何时候,你就知道什么叫“刺激”了。
加油吧!

#2


矩阵是基础知识。 

#3


比如你做shadow map 的话,就会遇到一系列矩阵的问题,当你把这些问题解决后,关于OGL中的坐标变换都会弄得比较清楚的。

#4


楼上几位都只说很重要,没回答问题。

点p,矩阵m,
p' = p * m;

p = p' * m~;

不知这样写,你是不是就很明白了。

#5


引用 4 楼 higter 的回复:
楼上几位都只说很重要,没回答问题。
点p,矩阵m,
p' = p * m;
p = p' * m~;
不知这样写,你是不是就很明白了。

非常感谢您的解答!
意思是逆矩阵的几何意义在于撤销原矩阵所带来的变换效果吧?
就好比假定M代表摄影矩阵,则p点经M变换得到p'点;而此时如果想要由p'反推得到p的话,就用到了viewInverse,是这样理解吗?

#6


引用 3 楼 peng_weida 的回复:
比如你做shadow map 的话,就会遇到一系列矩阵的问题,当你把这些问题解决后,关于OGL中的坐标变换都会弄得比较清楚的。

同样感谢1、2、3L三位高人的解答。
尤其是3L,您提供了一个很好的3D数学钻研方向,再次表示感谢~
最近在看《3D数学基础》这本书,打算从基础开始,好好克服一下自己的软肋。
大家关于3D数学学习这方面还有什么好的方法或者建议吗?恳请一并赐教~
感激不尽~

#7


变换矩阵m 左乘 顶点p, 就将p从一个坐标系变换到另一个坐标系
关于矩阵变换,主要是线性代数中的矩阵乘法。
关于3D数学知识的学习,没必要刻意去学吧(个人认为),要用到什么再学什么,不然很盲目。当然,这要看个人的情况。

#8


p*M = p‘

假设M的逆是T
那么 p'*T = p

这种一般用来反推位置之类的

#9


变换矩阵m, 逆矩阵m'(假设存在), 点P在A坐标系下的坐标Pa, 在B坐标系下的坐标Pb
如果 m * Pa = Pb
则   m'* Pb = Pa 

#10


3D数学基础,学会了的标准是自己有能力封装个3DVector类。
矢量的运算,加减乘除。。。。全都可以完成。

参考别人的代码,自己动手实践下吧。

很有意义。

#11


楼主问这样的问题,看来是没有理解图形管线的原理

顶点坐标传入shader中的是在模型坐标系下的坐标,如果需要在其他坐标系下计算,那么就要转换到对应的坐标下。