我正在尝试在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);
答案 0 :(得分:0)
Matrix.setRotateM
创建一个新的矩阵,围绕轴(x,y,z)以角度a(以度为单位)旋转。
Matrix.setLookAtM
根据视点,视点和向上矢量定义新的视角变换
两个操作都不操作输入矩阵,它们通过参数创建一个完整的新矩阵,并将其写入输出rm
。
比较时,用Matrix.rotateM
旋转给定的矩阵。
您必须按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);