[游戏] - 数学(切线空间)
- 计算切线空间
来源:http://jingli83.blog.sohu.com/94746672.html
切线空间:
因为显卡一般是以三角形作为最小渲染单位的,我们假设三角形的三点为p1, p2, p3,设该三角形所对应的一个空间为(T,B,N), 其中T和B构成的平面就是三角形所在平面, 而T和B分别对应U和V方向,此空间
的作用是让任何向量从tangent space变换到world space(实际上我们最终要求的是反过来的,先这样好作说明,最后求逆即可)
那么P2-P1的向量p必定在T及B所构成的平面上,由此推出:
P2-P1 = (U2-U1)*T+(V2-V1)*B
P3-P1 = (U3-U1)*T+(V3-V1)*B
设v1=P2-P1; v2=P3-P1; s1=U2-U1; s2=U3-U1; t1=V2-V1; t2=V3-V1
整理得出如下矩阵:
|v1| |s1 t1 | |T|
| | = | | * | |
|v2| |s2 t2 | |B|
v1 v2 s1 s2 t1 t2都是已知的,这样即可求得T和B,而N我们就用T和B的叉乘即可得到。
最后要T和B和N反过来作用向量从world space变换到tangent space, 我们只要对其求逆即可。
好了,有了这个,我们在作Normal map等处理时就可让光线变到切线空间中再乘上Noraml图中的法线即可。
参考:
Mathematics for 3D Game Programming & Computer Graphics, Section 6.8.3.
http://www.blacksmith-studios.dk/projects/downloads/tangent_matrix_derivation.php
================================================================================
- Computing Tangent Space Basis Vectors for an Arbitrary Mesh
来源:http://www.terathon.com/code/tangent.html
由于有公式贴不了出来,所以就不贴出来了,直接上上面的网址去看