XNA – ODE’s matrix to XNA’s matrix

ODE弄了老半天,終於在前陣子開始"動"了!
當然,是我沒有仔細掃過wiki,不然蠻多問題在裡面
有解答說
但是,旋轉問題馬上就出現了!

找了又找,估了又估,最後回到wiki裡面。
# 12.3.2 Can I use ODE with DirectX?
裡面可以很明顯的知道,ODE和DirectX是屬於同種類的矩陣,GREAT!!
我就很老實的套用他提供的轉換方法。
(在這時間點,我以為DX和XNA是同屬的…鄞老,我不小心又忘記你的提醒了 囧)

疑?怎麼總覺得不對勁?
雖然臨時使用頂點緩衝區繪製當作Debug用,可是大小不對就算了,轉得亂七八糟,整個就錯的吧!
就這樣從一個多月前開始修修整整,到了今天才正式確定。
好吧~自製的Debug工具的確有很大的Bug
今天終於可以靜下心來慢慢調整測試,才修正到目前應該正確的結果。

我是使用Tao Framework包裝的ODE。

Ode.Matrix3 To Matrix:

 public static Matrix ConvertToMatrix(Ode.dMatrix3 oriMat, Vector3 pos)
 {
     // Xx Yx Zx Ox
     // Xy Yy Zy Oy
     // Xz Yz Zz Oz
     // 0  0  0  1
     //
     //    -TO-
     //
     // Xx Xy Xz 0
     // Yx Yy Yz 0
     // Zx Zy Zz 0
     // Ox Oy Oz 1

     Matrix mat = new Matrix();
     mat.M11 = oriMat.M00;
     mat.M12 = oriMat.M10;
     mat.M13 = oriMat.M20;
     mat.M14 = 0;

     mat.M21 = oriMat.M01;
     mat.M22 = oriMat.M11;
     mat.M23 = oriMat.M21;
     mat.M24 = 0;

     mat.M31 = oriMat.M02;
     mat.M32 = oriMat.M12;
     mat.M33 = oriMat.M22;
     mat.M34 = 0;

     mat.M41 = pos.X;
     mat.M42 = pos.Y;
     mat.M43 = pos.Z;
     mat.M44 = 1;

     return mat;
 }

Matrix To Ode.Matrix3:

 public static Ode.dMatrix3 ConvertToOdeMatrix3(Matrix oriMat)
 {
     // Xx Xy Xz 0
     // Yx Yy Yz 0
     // Zx Zy Zz 0
     // Ox Oy Oz 1
     //
     //    -TO-
     //
     // Xx Yx Zx Ox
     // Xy Yy Zy Oy
     // Xz Yz Zz Oz
     // 0  0  0  1
     Ode.dMatrix3 mat = new Ode.dMatrix3();

     mat.M00 = oriMat.M11;
     mat.M01 = oriMat.M21;
     mat.M02 = oriMat.M31;
     mat.M03 = 0;

     mat.M10 = oriMat.M12;
     mat.M11 = oriMat.M22;
     mat.M12 = oriMat.M32;
     mat.M13 = 0;

     mat.M20 = oriMat.M13;
     mat.M21 = oriMat.M23;
     mat.M22 = oriMat.M33;
     mat.M23 = 0;

     return mat;
 }

如果有錯(希望沒有),麻煩提醒一下=..=

–End

發表迴響

在下方填入你的資料或按右方圖示以社群網站登入:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / 變更 )

Twitter picture

You are commenting using your Twitter account. Log Out / 變更 )

Facebook照片

You are commenting using your Facebook account. Log Out / 變更 )

Google+ photo

You are commenting using your Google+ account. Log Out / 變更 )

連結到 %s