2016-10-01 171 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变换在其他地方如动画中使用/引用,则它将禁用动画...