Unity Shader 从未入门到已放弃(一)--基础

以此开始记录和总结一下学习仙德尔的情况。

数学篇

矩阵是非常重要的一项数学知识,我们需要通过矩阵来计算平移、缩放、旋转等变换,更需要通过矩阵在不同的坐标空间中进行变换。为何又需要那么多的坐标空间呢?因为我们需要在不同的情况下使用不同的坐标,因为一些特定的概念只有在特定的空间坐标系下才有意义,才更容易理解。比如,你描述门的位置,是将坐标放在房间里,你描述你耳朵的位置,就需要将坐标放在脸上。

因为有不同的坐标空间存在,所以我们需要进行不同坐标空间的转换。

举例说明:有一个父坐标空间P,一个子坐标空间C。我们知道父坐标空间中子坐标空间的原点位置以及三个单位坐标轴。我们通常会有两种需求,一种是把子坐标空间下的点或矢量_{A_{c}}转到父坐标空间下的表示_{A_{p}},另一个需求则是反过来。我们可以用以下公式来表示:

                                                 _{A_{p}} =_{M_{c\rightarrow p}}_{A_{c}} 

                                                  _{A_{c}} =_{M_{p\rightarrow c}}_{A_{p}}

_{M_{c\rightarrow p}}表示从子坐标空间变换到父坐标空间的变换矩阵,_{M_{p\rightarrow c}}为其逆矩阵。现在我们已知C的三个坐标轴在P下表示\mathbf{_{X_{c}}}\mathbf{_{Y_{c}}}\mathbf{_{Z_{c}}},以及其原始位置\mathbf{_{O_{c}}},当给定一个子坐标空间中的一点_{A_{c}} =(a,b,c),则可以通过计算得_{A_{p}}=\mathbf{_{O_{c}}}+a\mathbf{_{X_{c}}}+b\mathbf{_{Y_{c}}}+c\mathbf{_{Z_{c}}},再按列展开并扩展到齐次坐标空间中

所以,最后就可以得到:

然后,我们还可以从这个转换矩阵中得到很多有用的信息以及推导:

因为矢量是没有位置的,原点的信息可以忽略掉,即可以得到一个3X3的矩阵,因为我们不需要表示平移变换,那么变换矩阵就是:

在shader中,我们常常会看到截取变换矩阵的前三行前三列来对法线方向,光照方向来进行空间变换,这正是原因所在。

特殊的 

 

3X3与4X4矩阵的选择

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值