假设我有2个矩阵:
MatrixA = translation1 * scale1 * rotation1
MatrixB = translation2 * rotation2 * translation3
MatrixA * MatrixB
是否等于translation1 * scale1 * rotation1 * translation2 * rotation2 * translation3
?或者其他什么附近?
事实上,我只想知道是否可以避免将矩阵相乘并通过仅使用1个矩阵来节省一些CPU,然后将数学运算链起来。
因为我计划制作一个基于LibGDX的小型自定义2D引擎,包括类似于Android SDK中的图形组件API 。无论如何,会有一些组件,即容器中的组件,当父母移动时需要移动。所以我需要这些叠加的算术。我知道使用矩阵是可能的,但因为它应该在移动设备上运行,所以我不希望它太慢。
答案 0 :(得分: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次矩阵乘法运算。如您所见,实际操作没有区别。你在技术上分配一个额外的矩阵,根据你的实现和频率,它可能会有所不同,但就数学运算而言,它是相同的。