1

假设我有 2 个矩阵:

MatrixA = translation1 * scale1 * rotation1
MatrixB = translation2 * rotation2 * translation3

MatrixA * MatrixB等于translation1 * scale1 * rotation1 * translation2 * rotation2 * translation3? _ 还是附近有别的东西?

事实上,我只是想知道是否可以避免将矩阵相乘并通过仅使用 1 个矩阵来节省一些 CPU,然后将数学运算链接起来。

因为我计划制作一个基于 LibGDX 的定制 2D 引擎,包括一个类似于 Android SDK 中的图形组件 API 。无论如何,会有一些组件,那些在容器中的组件,当他们的父母移动时需要移动。所以我需要这些叠瓦式的算术。我知道使用矩阵是可能的,但由于它应该在移动设备上运行,我不希望它太慢。

4

1 回答 1

2

你确实是对的。您可以通过将它们的链相乘来避免拥有多个矩阵。但是,请记住矩阵乘法是不可交换的,这意味着更改操作的顺序将导致两个不同的矩阵。例如:

matrixTranslate * matrixRotate将导致对象围绕一个点旋转,而:

matrixRotate * matrixTranslate将导致对象围绕自己的中心轴旋转。矩阵相乘的顺序没有错,但是您必须注意不同的结果。

说了这么多,在你的问题中:

MatrixA = translation1 * scale1 * rotation1
MatrixB = translation2 * rotation2 * translation3
MatrixC = MatrixA * MatrixB

这是 5 个矩阵乘法运算。如果要将它们全部链接在一起:

MatrixC = translation1 * scale1 * rotation1 * translation2 * rotation2 * translation3

您还将进行 5 次矩阵乘法运算。如您所见,实际操作没有区别。您在技术上分配了一个额外的矩阵,并且根据您的实现和频率可能会有所不同,但就数学运算而言,它是相同的。

于 2013-08-18T08:17:11.357 回答