OpenGL - Matrix操作

时间:2013-08-18 08:07:18

标签: java opengl matrix 2d libgdx

假设我有2个矩阵:

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

MatrixA * MatrixB是否等于translation1 * scale1 * rotation1 * translation2 * rotation2 * translation3?或者其他什么附近?

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

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

1 个答案:

答案 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次矩阵乘法运算。如您所见,实际操作没有区别。你在技术上分配一个额外的矩阵,根据你的实现和频率,它可能会有所不同,但就数学运算而言,它是相同的。