Java 打开GL旋转对象

Java 打开GL旋转对象,java,android,opengl-es,coordinate-transformation,Java,Android,Opengl Es,Coordinate Transformation,我正在尝试在OpenGL中旋转一个对象。我可以成功地画出一个正方形,但当我尝试旋转它时,它保持在同一个位置。我试着按照下面的线的顺序移动,但仍然不起作用(在某些顺序或删除某些线的情况下根本不画图)。。。这是我到目前为止的代码,mAngle是一个介于0和360之间的随机浮点 Matrix.setIdentityM(mModelMatrix, 0); Matrix.setRotateM(mModelMatrix, 0, mAngle, 0f, 0f, 1.0f); Matri

我正在尝试在OpenGL中旋转一个对象。我可以成功地画出一个正方形,但当我尝试旋转它时,它保持在同一个位置。我试着按照下面的线的顺序移动,但仍然不起作用(在某些顺序或删除某些线的情况下根本不画图)。。。这是我到目前为止的代码,mAngle是一个介于0和360之间的随机浮点

    Matrix.setIdentityM(mModelMatrix, 0);
    Matrix.setRotateM(mModelMatrix, 0, mAngle, 0f, 0f, 1.0f);
    Matrix.setLookAtM(mModelMatrix, 0, 0, 0, 5f, 0f, 0f, 0f, 0f, 10.0f, 0.0f);
    Matrix.translateM(mModelMatrix, 0, 0f, 0f, 0f);
    Matrix.multiplyMM(mMVPMatrix, 0, mProjectionMatrix, 0, mModelMatrix, 0);

    mSquare.draw(mMVPMatrix);

Matrix.setRotateM
创建一个新的矩阵,以绕轴(x、y、z)旋转角度a(以度为单位)。
Matrix.setLookAtM
根据视点、视点中心和上方向向量定义了新的视图变换。
这两种操作都不操纵输入矩阵,而是通过其参数创建一个完整的新矩阵,并将其写入输出
rm

相比之下,与
Matrix.rotateM
一个给定的矩阵是旋转的


您必须通过
矩阵创建一个单独的视图矩阵。setLookAtM

Matrix viewM = new Matrix();
Matrix.setLookAtM(viewM, 0, 0, 0, 5f, 0f, 0f, 0f, 0f, 10.0f, 0.0f);
你必须用矩阵乘以旋转矩阵(模型矩阵)。multiplyMM:

Matrix.multiplyMM(mModelMatrix, 0, viewM, 0, modelM, 0);

我建议这样编写代码:

Matrix modelM= new Matrix();
Matrix.setRotateM(modelM, 0, mAngle, 0f, 0f, 1.0f);

Matrix viewM = new Matrix();
Matrix.setLookAtM(viewM, 0, 0, 0, 5f, 0f, 0f, 0f, 0f, 10.0f, 0.0f);

Matrix.multiplyMM(mModelMatrix, 0, viewM, 0, modelM, 0);
Matrix.multiplyMM(mMVPMatrix, 0, mProjectionMatrix, 0, mModelMatrix, 0);

Matrix.setRotateM
创建一个新的矩阵,以绕轴(x、y、z)旋转角度a(以度为单位)。
Matrix.setLookAtM
根据视点、视点中心和上方向向量定义了新的视图变换。
这两种操作都不操纵输入矩阵,而是通过其参数创建一个完整的新矩阵,并将其写入输出
rm

相比之下,与
Matrix.rotateM
一个给定的矩阵是旋转的


您必须通过
矩阵创建一个单独的视图矩阵。setLookAtM

Matrix viewM = new Matrix();
Matrix.setLookAtM(viewM, 0, 0, 0, 5f, 0f, 0f, 0f, 0f, 10.0f, 0.0f);
你必须用矩阵乘以旋转矩阵(模型矩阵)。multiplyMM:

Matrix.multiplyMM(mModelMatrix, 0, viewM, 0, modelM, 0);

我建议这样编写代码:

Matrix modelM= new Matrix();
Matrix.setRotateM(modelM, 0, mAngle, 0f, 0f, 1.0f);

Matrix viewM = new Matrix();
Matrix.setLookAtM(viewM, 0, 0, 0, 5f, 0f, 0f, 0f, 0f, 10.0f, 0.0f);

Matrix.multiplyMM(mModelMatrix, 0, viewM, 0, modelM, 0);
Matrix.multiplyMM(mMVPMatrix, 0, mProjectionMatrix, 0, mModelMatrix, 0);

谢谢,让它与你的代码一起工作。我花了几个小时想弄明白。谢谢,让它和你的代码一起工作。几个小时来我一直在想办法。