施密特正交化

有时候我们在某些计算中需要将向量转换到另外一个坐标系下,例如在屏幕环境光遮蔽中(SSAO)我们需要将半球采样核心(hemisphere sample kernel)向量转换到法线所在的切线空间也就是TBN矩阵,法线N我们已经有了,其实在SSAO中B和N向量可以是任意的,只要T,B,N彼此互相垂直即可,所有可以首先随机生成一张噪音图(noise),但是有个问题是我们不能保证噪音图上的随机向量垂直于法线向量,这个时候就是施密特正交化(Gramm-Schmidt Process)大显身手的时候啦。

 

如图:

n是法线向量,t是随机向量,现在n和t是不垂直的,我们需要将向量t拉到下面虚线的位置,可以这样做:

t = normalize(t - n * dot(n, t));

这个时候t和n就垂直了,然后b向量就很简单了:

vec3 b = cross(n, t);

然后就有了我们的TBN矩阵啦

mat3 TBN = mat3(t, b, n);

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值