顯示具有 座標變換 標籤的文章。 顯示所有文章
顯示具有 座標變換 標籤的文章。 顯示所有文章

2021年11月27日 星期六

透視校正

假設三角形的3個頂點
在modle space是Am、Bm、Cm

頂點乘上Model View Projection Matrix(MVP)後
變換到Projection space
MVP(Am) = A、MVP(Bm) = B、MVP(Cm) = C
A(x)代表存取頂點A的屬性x,以推類推
B(w)代表存取頂點B的屬性w

找出P(w)

透視校正就是
透過P(w)反推出「在黃色三角形上內插的結果」

2021年11月1日 星期一

對函數進行旋轉

 


用座標變換 對函數進行旋轉




轉45度也可以 只是GeoGebra不能畫
要用別的軟體畫

2021年10月25日 星期一

右手座標和左手座標的資料交換

如果有1個建模軟體是右手座標系

首先
在建模軟體裡成生1個假的左手座標系 W
(就是生成1組3軸和原點,視你引擎的需要來定義)

mesh的部分

把資料變換到該座標系 W
(透過world To Local transform 幾何意義)

資料可能是
  • 頂點vertexs
  • 法向量normal
  • 切向量tangent (轉換tangent.xyz之外, tangent.w 也要乘上1個負號 )
這樣一來 在座標系W 裡的 local 資料
就能直接拿出去給左手的引擎使用

也能在建模軟體正確的顯示
(透過local To World transform 幾何意義)


bone的部分

bone其實就是階層式的座標系
(也就是階層式的matrix)

Bn代表第n個bone
  • 每個Bn其實可以寫成1個 bone matrix Mn
  • 已經和parent bone matrix相乘的叫=> Mn_world 
  • 還沒和parent bone的matrix相乘的叫 => Mn_local 
  • matrix同時有S(縮放)、R(旋轉)、T(位移) 3個資訊
  • R(旋轉)矩陣 等價於「1個繞軸旋轉」可以用「1個四元數」來表示
  • S(縮放)矩陣 等價於 vS = (Sx,Sy,Sz)
  • T位移 等價於 vP = (Px,Py,Pz)

我想到的方法是
  • (步驟1)把Mn_world轉換成對映的 Qn_world 、vSn_world、vPn_world
  • (步驟2)把Qn_world 、vSn_world、vPn_world變換到座標系 W 得到 (為什麼?)
    • Qn_world_w
    • vSn_world_w
    • vPn_world_w 
  • 在座標系 W裡 把上面3個東西轉換為Mn_world_w
  • 在座標系 W裡 重建 Mn_world_w的階層關系得到Mn_local_w
  • export的時候再把Mn_local_w轉成
    • Qn_local_w
    • vSn_local_w
    • vPn_local_w 

上面的(步驟2) 把matrix拆成3種分量做轉換是因為考慮到
  • 如果直接轉換matrix 會像這樣 圖示  (W座標系其實和建模世界的world重疊,但為了好比較,所以畫的時候偏移了一下)
  • bone代表的3軸並沒有變成左手的

  • 如果是先透過 四元數(繞軸旋旋)來轉換
  • 就會像這樣 圖示
  • ⚠️只是如果Sx,Sy,Sz都不一樣,轉換後scale 還要把Sy,Sz做交換
這麼說來
(步驟1)(步驟2)
改成直接轉換Mn_world到Mn_world_w 圖示 
再交換bone的y軸、z軸也是可以的(但縮放不交換)

W座標系

根據 圖示 以row-major寫出 W座標系就是(用column-major其實會得到1樣的結果)
W=
1 0 0 
0 0 1
0 1 0

因為W只是旋轉矩陣
W的逆=W的transpose=W
1 0 0 
0 0 1
0 1 0

(x,y,z)W =(x,z,y)

所以轉換mesh的
  • 頂點
  • 法向量
  • 切向量
到W座標系

實際上做的也只是交換y,z值而已

2018年10月14日 星期日

世界World、點Point、向量Vector

P = Q + aX + bY



以世界為基準,定義座標系M



進行座標變換



矩陣連鎖



local to world



world to local