Android Matrix.multiplyMV 没有通过翻译改变我的结果

标签 android opengl-es matrix 3d

我正在尝试将一个坐标系中的一组点转换为我的 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/

相关文章:

java - Android 上不一致的 SSLv3 握手失败

iphone - 转置矩阵 - 水平到垂直 - OpenGL ES - iPhone

java - libgdx opengl 错误

image-processing - 处理 OpenCL 内核中的临时矩阵和私有(private)内存

java - 递归类型适配器 GSON

java - 我们可以在回收 View 中调整项目高度吗?

android - 尝试在 Android Studio 321 中打开 .java 和 .xml 文件时显示一些错误

ios - OpenGL ES IOS纹理2D颠倒绘制

graphics - 在 C++ 中以编程方式使用高斯滤波器填充 nxn 矩阵

r - 有没有更快的方法在 Rcpp/c++ 中进行 Cholesky 分解?