[android]使用 matrix 旋转一个多维数据集给出了错误的结果

标签: Java Android
发布时间: 2017/3/19 19:16:11
注意事项: 本文中文内容可能为机器翻译,如要查看英文原文请点击上面连接.

为我 OpenGL 的应用程序,我有以下的坐标所定义的多维数据集︰

coords=new float [] {-0.5f,0.5f,0.5f,1f,
     -0.5f,-0.5f,0.5f,1f,
     0.5f,-0.5f,0.5f,1f,
     0.5f,0.5f,0.5f,1f,
     -0.5f,0.5f,-0.5f,1f,
     -0.5f,-0.5f,-0.5f,1f,
     0.5f,-0.5f,-0.5f,1f,
     0.5f,0.5f,-0.5f,1f};

它代表以下 matrix :

-0.5  -0.5   0.5   0.5  -0.5  -0.5   0.5   0.5
 0.5  -0.5  -0.5   0.5   0.5  -0.5  -0.5   0.5
 0.5   0.5   0.5   0.5  -0.5  -0.5  -0.5  -0.5
 1     1     1     1     1     1     1     1

我定义旋转 matrix 与︰

float [] matrix=new float[16];
Matrix.setRotateM(matrix,0,90,1,0,0);

所以我 matrix 是︰

1   0   0   0
0   0   -1  0
0   1   0   0
0   0   0   1

当我试着将旋转应用到坐标下 Matrix.multiplyMM(coords,0,matrix,0,coords,0); ,我将得到以下结果︰

    -0,5  -0,5   0,5   0,5  -0,5  -0,5   0,5   0,5
    -0,5  -0,5  -0,5  -0,5   0,5  -0,5  -0,5   0,5
     0,5  -0,5  -0,5   0,5  -0,5  -0,5  -0,5  -0,5
     1     1     1     1     1     1     1     1

对我来说,和我的计算器以及、 第六和第七届第二行的元素都错了 (他们都应该积极)。同样的事情,5 号和 8 号 element 的第三行。

谁能告诉我问题在哪里?

解决方法 1:

你误解了什么 multiplyMM 做。此函数乘以 4 x 4 matrix 由另一个 4 x 4 matrix 。通过调用

Matrix.multiplyMM(coords,0,matrix,0,coords,0);

函数首先 16 浮游物 coords 作为首先 matrix ,第一次 16 浮游物 matrix 作为第二个 matrix 和存储的所有内容在第一次 16 浮游物坐标。因此后 16 的所有元素都是从来不touch。

我猜你想要乘以每个向量在 coordsmatrixmatrix 。为此 multiplyMM 是完全错误的函数,因为它 matrixmatrix 乘法,不 matrix 倍向量。要变换的向量组的 matrix 你要反复调用 Matrix.multiplyMV ,适当的偏移量︰

for (int i = 0; i < 8; i++)
{
    Matrix.multiplyMV(coords, 4 * i, matrix, 0, coords, 4 * i);
}
官方微信
官方QQ群
31647020