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
旋转了给定的矩阵。
您必须通过 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);
我正在尝试在 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
旋转了给定的矩阵。
您必须通过 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);