变换矩阵的应用

变换矩阵与向量相乘,有以下两种情况

有坐标空间A和坐标空间B

变换矩阵M(A->B):A的基向量在B空间的表示,按列排列。

 

情况1:

M(A->B)*空间A的向量Va,空间A表示的Va转为在B空间表示;变换后,向量不变,用另一个坐标系表示

 

例:切线空间:空间A、世界空间:B空间、法线贴图的法线:空间A的向量Va

切线空间的切线、副切线、法线在世界空间的表示,按列排列,构成变换矩阵,把法线贴图的法线转换到世界空间。

 

情况2:

M(A->B)*空间B的向量Vb,Vb通过M旋转、位移、缩放;变换后,向量改变,发生旋转、位移、缩放

 

例:《Unity Shader入门精要》11.3.2广告牌例子,新坐标空间:A空间、模型空间:B空间、模型空间内各点:空间B的向量Vb。

新坐标空间的基向量在模型空间的表示,按列排列,构成变换矩阵,将模型空间内各点变换(旋转)到新坐标空间。

 

《Unity Shader入门精要》11.3.2广告牌例子

矩阵变换代码:

float3 centerOffs = v.vertex.xyz - center;

float3 localPos = center + rightDir * centerOffs.x + upDir * centerOffs.y + normalDir * centerOffs.z;

实现的原理如情况2,相当于rightDir ,upDir ,normalDir构成的矩阵与centerOffs向量相乘,得到centerOffs旋转后的位置

在这个例子中星星的xy面始终面对摄像机,z轴指向摄像机,如果想要星星始终平放在地面上的效果,将xy面对应到新坐标系的xz(rightDir 、normalDir )面(注意z轴朝向),代码改成

float3 localPos = center + rightDir * centerOffs.x + upDir * centerOffs.z + normalDir * -centerOffs.y;

效果如下:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值