3D中的切線空間簡介

2021-05-22 15:09:09 字數 1123 閱讀 8099

1、 什麼是tangent space?

tangent space和world space,view space其實是同樣的概念,均是代表三維座標系。在這個座標系中, x軸對應紋理座標的u方向,沿著該軸紋理座標u線性增大。y軸對應紋理座標的v方向,沿著該軸紋理座標v線性增大。z軸則是uxv,垂直於紋理平面。

2、 為什麼需要tangent space?

在normal map等技術中,儲存在texture中的值是基於tangent space的法線。因此,當我們sample這些texure中的法線進行光照計算時,必須要統一到同一座標系下結果才正確,這時候就需要切線空間(就像是所有的local space都要統一到world space乙個道理。

那麼為什麼normal map裡面存的法線資訊是基於tangent space而不是基於local sapce呢?基於local space理論上是可以的,但是這樣的normal map只能用於這乙個模型,不同把這個normal map用於其他模型。比如說建模了乙個人,並且生成了該模型基於local space的normal map,如果我們建模同樣乙個人,但是放的位置和角度和之前的不一樣,那麼之前的normal map就不可用了,因為local space並不一樣。但如果我們normal map裡存的是tangent space的normal的話,就不存在這個問題,因為辦要模型一樣,模型上每個點的tangent space就是一樣的,所謂是以不變應萬變。

3、 怎樣計算tangent space?

假設三角形三個座標點為p1(u1,v1)、p2(u2,v2)、p3(u3,v3),假設切線空間的三個基為t,b,n(t為切線方向,也就是u方向,b為負法線方向,也就是v方向),其實t和b均在三角形所在的平面上。

p1*t =u1,p2*t=u2,p3*t=u3

p1*b=v1,p2*b=v2,p3*b=v3

因為p1(u1,v1)、p2(u2,v2)、p3(u3,v3)均是已知的,因此可以解出t和b向量,由於n=txb,因此便得到了該三角形的切線空間。

在實際程式設計中,可以直接調d3d的函式由mesh來生成切線空間,但是知其然,必盡更好些。

(發現要通俗易懂地講清楚一件事情好難,不僅要耐心,而且還要水平)

3D中的切線空間簡介

1 什麼是tangent space?tangent space和world space,view space其實是同樣的概念,均是代表三維座標系。在這個座標系中,x軸對應紋理座標的u方向,沿著該軸紋理座標u線性增大。y軸對應紋理座標的v方向,沿著該軸紋理座標v線性增大。z軸則是uxv,垂直於紋理平...

3D中的切線空間簡介

1 什麼是tangent space?tangent space和world space,view space其實是同樣的概念,均是代表三維座標系。在這個座標系中,x軸對應紋理座標的u方向,沿著該軸紋理座標u線性增大。y軸對應紋理座標的v方向,沿著該軸紋理座標v線性增大。z軸則是uxv,垂直於紋理平...

3D空間變換

它相當於是平移變換 t 和旋轉變換 r 的復合,等距變換前後長度,面積,線線之間的角度都不變。自由度 6 旋轉變換r自由度 3,平移變換t自由度 3 t rt0t 1 t begin r t 0 t 1 end t r0t t1 4x4矩陣 eigen isometry3d eigen isomet...