2016-10-01 180 views
0

我有人體骨骼(骨臀部的例子)的3個變換:如何從平移,旋轉和縮放轉換中轉換4x4矩陣?

<node id="hips" name="hips_bone" type="JOINT"> 
    <translate>0 0.941045 -0.02637</translate> 
    <rotate sid="rotateZ">0 0 1 90</rotate> 
    <rotate sid="rotateY">0 1 0 -12.0004</rotate> 
    <rotate sid="rotateX">1 0 0 0</rotate> 
    <scale>1 1 1</scale> 
    </node> 

是否有辦法將這些數據轉換成4x4矩陣? (我想我們可以關閉比例轉換因爲它總是1 1 1)。

爲了更加精確我想達到的結果:

<matrix sid="matrix"> 
    0.978148 -0.207912 0.000000 0.000000 
    0.207912 0.978148 0.000000 -0.000012 
    -0.000000 0.000000 1.000000 0.000000 
    0.000000 0.000000 0.000000 1.000000 
</matrix> 

(結果矩陣是不等於所述轉換數據段)。

是否有任何有用的結構在C#中使用4x4矩陣?

+0

更具體地說;你能爲此添加數學公式嗎?或者你知道轉換公式嗎? - 如果不是,所以我們無法幫助你,然後在[數學](http://math.stackexchange.com/)中提出你的問題;)。 –

+1

請參見[Matrix4x4結構](https://msdn.microsoft.com/en-us/library/system.numerics.matrix4x4(v = vs.111).aspx)。 –

回答

1

如果您想在C#中使用3D圖形,您可以使用專用框架,例如OpenTK(https://www.nuget.org/packages/OpenTK/)。它提供了一種在C#中使用OpenGL功能的方法。它還有許多有用的方法來處理轉換,包括使用4x4矩陣。藉助OpenTK庫,您還可以獲得一些示例項目,以瞭解其工作原理或通過其中一個教程(例如http://genericgamedev.com/tutorials/opengl-in-csharp-an-object-oriented-introduction-to-opentk/)。

我喜歡OpenTK的事實也是它可以注入到WinForms或WPF項目中,就像任何其他控件或usds在遊戲窗口模式下類似於OpenGL中使用的那樣。

我希望我可以幫忙。

0

有沒有辦法將這些數據轉換爲4x4矩陣? (我想我們可以關閉比例轉換因爲它總是1 1 1)。

首先建立一個ID矩陣然後,應用轉化,應用旋轉...等等

我實現(ak_transformCombine)它建立個別轉換4x4矩陣: https://github.com/recp/assetkit/blob/master/src/transform/ak_trans.c#L50

這是C代碼不是C#,但數學將相同,在未來我可以編寫C#包裝器

不要忘記,其中一些變換有sid attrib li ke sid =「rotateZ」。如果這些sid -ed變換在其他地方如動畫中使用/引用,則它將禁用動畫...