Opengl 旋转对象

Open GL Rotate Object

我正在尝试在 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);

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);