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.M21 = oriMat.M01; mat.M31 = oriMat.M02; mat.M41 = pos.X; 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.M10 = oriMat.M12; mat.M20 = oriMat.M13; return mat; |
如果有錯(希望沒有),麻煩提醒一下=..=