打开GL旋转对象

时间:2017-11-09 14:24:19

标签: java android opengl-es coordinate-transformation

我正在尝试在Open GL中旋转对象。我可以成功地画一个正方形,但是当我尝试旋转它时,它会停留在同一个地方。我试图移动下面的行的顺序,但仍然没有工作,(根本没有删除特定顺序或某些行)...这里是我的代码到目前为止,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);

1 个答案:

答案 0 :(得分:0)

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

比较时,用Matrix.rotateM旋转给定的矩阵。

请参阅android.opengl - Matrix


您必须按Matrix.setLookAtM创建一个单独的视图矩阵:

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

并且你必须通过Matrix.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);