0

典型的旋转公式是(wi​​ki)

在此处输入图像描述

让我们以 45 度绕 X 轴旋转为例。cos45 = sin45 = 0.707...

所以结果矩阵应该是

[ 1 0 0 0 ]

| 0 0.707 -0.707 0 |

| 0 0.707 0.707 0 |

[ 0 0 0 1 ]

所以我使用 android.opengl.Matrix

Matrix.setIdentityM(mModelMatrix, 0);

Matrix.rotateM(mModelMatrix, 0, mModelMatrix, 0, 45, 1.0f, 0.0f, 0.0f);

然后我看结果,它是:

[ 1 0 0 0 ]

| 0 0.707 -0.499 0 |

| 0 0.707 0.207 0 |

[ 0 0 0 1 ]

请解释一下这是什么?一个错误?一个特征?或者我可能会错过一些数学及其平等?

4

1 回答 1

2

有两个不同的版本android.opengl.Matrix.rotateM

public static void rotateM (float[] m, int mOffset, float a, float x, float y, float z)
// Rotates matrix m in place by angle a (in degrees) around the axis (x, y, z)

public static void rotateM (float[] rm, int rmOffset, float[] m, int mOffset, float a, float x, float y, float z)
// Rotates matrix m by angle a (in degrees) around the axis (x, y, z)

看起来你想将它旋转到位——你的源矩阵和结果矩阵是相同的 float[]——但是你正在使用从一个矩阵读取并写入另一个矩阵的调用。查看 的实现rotateM,看来这不受支持。

于 2013-05-08T00:50:05.730 回答