我正在尝试将一个坐标系中的一组点转换为我的 Android OpenGL 项目的另一个坐标系。
假设matrix
是一个包含16个元素的 float 组。
假设 points
是对每个包含 4 个元素的 float 组数组的引用。 (points = new float[8][4]
)
我将矩阵设置为单位矩阵,然后对其进行平移并乘以游戏对象的旋转。然后,我尝试将 8 个顶点中的每一个转换到新的矩阵坐标系中,但没有一个点发生变化。
Matrix.setIdentityM(matrix, 0);
Matrix.translateM(matrix, 0, go.getPosition().getX(), go.getPosition().getY(), go.getPosition().getZ());
Matrix.multiplyMM(matrix, 0, matrix, 0, go.getRotationArray(), 0);
//Matrix.rotateM(matrix, 0, 30f, 1.5f, -5f, 0f); testing debug purpose
for(int i=0;i<8;i++)
{
Matrix.multiplyMV(points[i], 0, matrix, 0, points[i], 0);
}
我基本上是在尝试做 Android 的 2D Canvas 和矩阵“mapPoints”所做的事情。
最佳答案
当你有一个向量时,4 个长向量的最后一个元素必须是 1 而不是 0!因此翻译数据没有被正确相乘。 (嗯,它做得正确,只是不是我想要的。)因此,当 android.opengl.Matrix 要求一个四个长向量并且前三个元素代表您的 x,y,z 时,请确保设置了第四个元素到 1!
关于Android Matrix.multiplyMV 没有通过翻译改变我的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17508744/