我正在开发 android 中的增强现实应用程序。目前我对 Open GL ES 2.0 的东西有一些问题。首先我想旋转一个对象,然后翻译它,但它不起作用。单一的转换,意味着只有旋转或平移,正在工作。我认为我的问题类似于OpenGL - 旋转后翻译,但那里的答案对我没有帮助。例如,如何将对象绕 z 轴旋转 45 度,然后将其向左或向右平移 100 像素?
这是一些代码:
Matrix.setIdentityM(mModelMatrix, 0);
// Euler angles in res[] from opencv
Matrix.setRotateEulerM(mRotateMatrix, 0, (float) res[0], (float) res[1], (float) res[2]);
Matrix.multiplyMM(mModelMatrix, 0, mRotateMatrix , 0, mModelMatrix, 0);
Matrix.translateM(mModelMatrix, 0, (x-hmWidth),(y-hmHeight)*(-1), 0);
Matrix.scaleM(mModelMatrix, 0, (float) arc.getSize().width, (float) arc.getSize().height, 10);
drawBlock(gl);
Udate:
我发现有时欧拉角一定是错误的,或者我以不正确的方式使用它们。我不知道。当我使用Matrix.rotateM(mModelMatrix, 0, 90, 0, 0, 1);
AFTER翻译时,一切正常。现在我不知道如何将欧拉角与 rotateM() 一起使用。我曾尝试调用该方法三次,但随后出现错误的轮换:
Matrix.rotateM(mModelMatrix, 0, (float) res[0], 1, 0, 0);
Matrix.rotateM(mModelMatrix, 0, (float) res[1], 0, 1, 0);
Matrix.rotateM(mModelMatrix, 0, (float) res[2], 0, 0, 1);