一: 数学中的n维欧氏空间的切空间定义为:如果k维曲面S在点x0∈S的邻域内能用k个独立参数t1,t2, … , tk给出的光滑映射t→x即(t1,t2,…,tk)→(x1,x2,…,xn)给出,x0=x(0)且矩阵x'(0)的秩为k,那么称在n维欧 氏空间中用矩阵形式的参数方程x-x0=x'(0)t给出的k维平面为曲面S在点x0∈S的切空间或者切平面。
3维欧氏空间中曲面是个2维曲面,曲面中某点的切空间就是该与点的法向量垂直那个2维平面(一个2维向量空间).
二. 图形学中的计算的Tangent Space 和上面一致,但一般还要计算出N, 构造一个TBN矩阵。T就是Tangent,N即Normal,B即 Bitangent。国外很多资料包括DirectX都称B为Binormal, 实际上Binormal的命名来自于曲线论,而这儿我们考察的是曲面,所以称为Bitangent更准确些。为了近似计算TBN空间的基向量,可以引入面切空间的概念,它就是顶点所关联的face所在平面决定的 一个二维子空间。向量T,B可以用面切空间基的加和来近似表达出来。
三. 当使用法线贴图等技术时, 应将得到的顶点的T值调整一下,使之和法线图中的法线N垂直,然后再用叉积得到B 。新的[T, B]与新顶点法线所表示的一维子空间作直和就构成了我们最终所需要的变换阵 [T, B, N],然后在vertex shader中逐顶点将光向量L变换到这个空间成L’,然后在pixel shader中用硬件插值得到的光向量与法线作点积就得到光强度了。
Leave a Reply