如何通过平移、旋转和缩放变换转换 4x4 矩阵?

问题描述 投票:0回答:2

我有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 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 矩阵?

c# math matrix collada
2个回答
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-到-opentk/)。

我喜欢 OpenTK 的另一个原因是,它可以像任何其他控件或游戏窗口模式下的 usd 一样注入到 WinForms 或 WPF 项目中,类似于 OpenGL 中使用的模式。

希望能帮到你。


0
投票

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

首先构建一个 ID 矩阵,然后应用平移、应用旋转...等等

我的实现 (

ak_transformCombine
) 它从各个变换构建 4x4 矩阵: https://github.com/recp/assetkit/blob/0e4f91591ab04243b37113aad731b0697c919cb8/src/transform/ak_trans.c#L50

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

不要忘记其中一些转换具有

sid
属性,例如 sid="rotateZ"。如果这些
sid
-ed 变换在动画等其他地方使用/引用,它将禁用动画...

© www.soinside.com 2019 - 2024. All rights reserved.