tangent space--切空间

来源:互联网 发布:网络视频会议摄像头 编辑:程序博客网 时间:2024/04/29 20:06
在做类似normal mapping的时候我们不可避免的要接触到tangent space--切空间;
需要在这个空间里面做光照计算;
自己经常被这些个概念混淆,试图在这篇blog里面弄清楚;
1,tangent space 与 model space
这是两个coordinate,存储normal map信息的时候是按照tangent space来存储;
model space就是一个物体所在的空间,tangent space对于3D object来说就是某一点的vertex的切平面;
而做光照计算的时候,光源是在model space,由于我们要得是夹角,所以可以把一个转换到另外一个中去;
2,转换:
tangent space象model space一样,用三个向量定义,对应x,y,z轴,名字叫tangent,normal,binormal
如果我们已知tangent,normal,binormal在model space中normalize后的值;
那么转换工作就可以通过构建3x3矩阵来实现,如果做向量变换的时候采用矩阵在右的乘法的话,
矩阵可以这样构建:|tx,nx,bx|
    |ty,ny,by|
    |tz,nz,bz|
意义也非常明显,假设vec(x,y,z)做矩阵乘法时候,那么第一项是dot(vec,float3(tx,ty,tz))
就是vec在tangent上的投影大小;
3,tangent matrix是orthogonal的
orthogonal矩阵就是它的转置是它的逆矩阵;
由于tangent,normal,binormal是正交的,而且normalize的,
所以无论推理还是验证都可以得到这个特点;
 
原创粉丝点击