【发布时间】:2023-03-28 03:07:01
【问题描述】:
使用 android.graphics.Matrix 库:
Matrix foo = new Matrix();
foo.setTranslate(10.0f, 0.0f);
Log.d("MatrixTest", foo.toString());
foo.postRotate(30.0f, 0.0f, 0.0f);
Log.d("MatrixTest", foo.toString());
我得到以下输出:
foo = {[1.0, 0.0, 10.0][0.0, 1.0, 0.0][0.0, 0.0, 1.0]}
foo = {[0.8660254, -0.5, 8.660254][0.5, 0.8660254, 5.0][0.0, 0.0, 1.0]}
这正是我所期望的。
现在我的应用程序也可以在桌面上运行很有用,所以我正在移植到 libgdx。
使用 com.badlogic.gdx.math.Matrix3 库:
Matrix3 bar = new Matrix3();
bar.translate(10.0f, 0.0f);
System.out.println(bar.toString());
bar.rotate(30.0f);
System.out.println(bar.toString());
我得到以下输出:
bar = [1.0|0.0|10.0] [0.0|1.0|0.0] [0.0|0.0|1.0]
bar = [0.8660254|-0.5|10.0] [0.5|0.8660254|0.0] [0.0|0.0|1.0]
在这种情况下,X 的平移分量没有被旋转。
这是正确的行为吗? android postRotate() 方法和 libgdx rotate() 方法的 API 将它们描述为 post-rotate 函数。
对于 libgdx Matrix4,我得到了类似的结果,这是我真正想要使用的。
有人可以提出一个很好的方法来重现使用 libgdx Matrix3 或 4 从 android 库获得的结果吗?
【问题讨论】:
-
我认为交换操作应该可以满足您的需求。所以先旋转再平移。如果是这种情况,我将在答案中更详细地解释。
-
你当然是对的。我知道矩阵乘法不是可交换的。但是由于这两个 API 都宣传自己是 postMultiply,令人沮丧的是它们不会产生相同的结果!
-
好吧,第二个似乎使用标准操作,因此文档错误或解释错误。
-
我的理解有误,我很困惑哪个矩阵是后级联的。谢谢。
标签: java android matrix opengl-es rotational-matrices