Java OpenGL-矩阵运算

Java OpenGL-矩阵运算,java,opengl,matrix,2d,libgdx,Java,Opengl,Matrix,2d,Libgdx,假设我有两个矩阵: MatrixA = translation1 * scale1 * rotation1 MatrixB = translation2 * rotation2 * translation3 MatrixA*MatrixB是否等于translation1*scale1*rotation1*translation2*rotation2*translation3?或者附近的什么地方 事实上,我只是想知道我是否可以避免将矩阵相乘,并且只使用1个矩阵,然后将数学运算串联起来,从而节省一

假设我有两个矩阵:

MatrixA = translation1 * scale1 * rotation1
MatrixB = translation2 * rotation2 * translation3
MatrixA*MatrixB
是否等于
translation1*scale1*rotation1*translation2*rotation2*translation3
?或者附近的什么地方

事实上,我只是想知道我是否可以避免将矩阵相乘,并且只使用1个矩阵,然后将数学运算串联起来,从而节省一些CPU


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

你确实是对的。通过将一系列矩阵相乘,可以避免拥有多个矩阵。但是,请记住,矩阵乘法是非交换的,这意味着改变运算顺序将导致两个不同的矩阵。例如:

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

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

话虽如此,在你的问题中:

MatrixA = translation1 * scale1 * rotation1
MatrixB = translation2 * rotation2 * translation3
MatrixC = MatrixA * MatrixB
这是5个矩阵乘法运算。如果要将它们全部链接在一起:

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

你还要做5个矩阵乘法运算。正如你所看到的,在实际操作中没有区别。从技术上讲,您分配了一个额外的矩阵,这取决于您的实现和频率,可能会有所不同,但就数学运算而言,这是相同的。

因此,使用链式计算而不是直接乘以矩阵是否有真正的优势?矩阵乘法有那么慢吗?拥有这样的代码结构(我的意思是,对于移动设备上的CPU和内存使用来说)值得吗?@miNde它肯定可以节省您的操作。在上面的代码中,您总共执行了7次矩阵乘法,而使用链接执行了6次。我个人总是使用“链接”,但如果你没有看到性能的提升,也不用太担心。事实上,我还没有通过测试进行比较。我只是想在开始使用它开发东西之前先修复一下。我不想白干,听起来很正常:)@miNde我很抱歉,我犯了一个巨大而可笑的错误,我已经更新了答案。我现在回答堆积如山的问题还为时过早;)英雄联盟别担心。我会测试一切,做一些板凳,然后接受你的答案,如果你是正确的。我应该在问之前自己做这件事。