我如何从平移,旋转和缩放转换转换一个4x4矩阵



我有3个人类骨骼的转换(以髋骨为例):

  <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 11 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矩阵一起工作?

如果你想在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项目中,就像在游戏窗口模式下的任何其他控件或使用一样,类似于在OpenGL中使用的。

希望我能帮上忙。

是否有方法将此数据转换为4x4矩阵?(我想我们可以放弃比例变换,因为它总是1 11 1)。

首先建立一个ID矩阵,然后应用平移,应用旋转…等等

我的实现(ak_transformCombine)它建立4x4矩阵从个别变换:https://github.com/recp/assetkit/blob/master/src/transform/ak_trans.c预示

这是C代码,而不是c#,但数学将是相同的,将来我可能会为它编写c#包装器

不要忘记,其中一些变换具有sid属性,如sid="rotateZ"。如果这些sid -ed转换在其他地方使用/引用,如动画,它将禁用动画…

最新更新