【UnityShader】座標空間與座標變換

座標空間變換

  • 每個座標空間都是另一個座標空間的子空間,反過來,每個座標空間都有一個父座標空間;
  • 對座標空間的變換實際上就是在父空間和子空間之間點和矢量進行變換;
  • 假設
    現有父座標空間 P 以及子座標空間 C,已知在父座標空間中子座標空間的原點位置 Oc 以及 3 個單位向量的表示 xcyczc。把子座標空間下的點或者矢量 Ac(a,b,c) 變換到父座標空間下 Ap,步驟:
       1. 從座標原點 Oc 開始;
       2. 向 xc 方向移動 a 個單位;
       3. 向 yc 方向移動 b 個單位;
       4. 向 zc 方向移動 c 個單位;

    最後xcyczc分別代表他們所在的列,這個公式還存在着加法表達式,即平移變換,由於3x3的矩陣無法表示平移變換,需要把他們轉換到齊次座標空間。

       矢量是沒有位置的,因此,座標空間原點的平移變換可以忽略,也就是說,僅僅平移座標系原點是不會對矢量造成任何影響的,那麼,對矢量的座標空間變換就可以使用3x3的矩陣來表示。在Shader中,常常截取變換矩陣的前3行前3列來對法線方向、光照方向進行空間變換,原因就是這個。
       從子座標空間到父座標空間的變換矩陣 Mc->p

       父座標空間到子座標空間的變換矩陣 Mp->c

    總結
       已知子座標空間在父座標空間中的信息,那麼從子座標空間到父座標空間,三個座標軸站着,從父座標軸空間到子座標軸空間躺着。

頂點座標的變換過程


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章