用于平移,缩放和旋转2D摄像机的OpenGL正确乘法顺序

时间:2014-06-17 18:24:02

标签: opengl matrix camera opengl-es-2.0 matrix-multiplication

我正在尝试制作相机的视图矩阵,使其可缩放,可平移和可旋转。我希望工作的矩阵是。

Matrix.translateM(matrixView, 0, -camposition.X, -camposition.Y, 0);
Matrix.scaleM(matrixView, 0, zoom, zoom, 1.0f);
Matrix.rotateM(matrixView, 0, camrotation, 0, 0, 1.0f);
Matrix.translateM(matrixView, 0, screenwidth / 2, screenheight / 2, 0);

然而,这种方式不起作用。如果有人能指出我正确的方向,我将不胜感激。

以下是我如何使用模型矩阵:

Matrix.translateM(matrixModel, 0, position.X, position.Y, 0.0f);
Matrix.scaleM(matrixModel, 0, scale.X, scale.Y, 1.0f);
Matrix.rotateM(matrixModel, 0, rotation, 0, 0, 1.0f);
Matrix.translateM(matrixModel, 0, -origin.X, -origin.Y, 0.0f);

以下是投影矩阵:

Matrix.orthoM(matrixProj, 0, 0f, screenWidth, screenHeight, 0, -1, 1);

我将它们在顶点着色器中相乘,如下所示:

matrixProj * matrixView * matrixModel * vPosition;

1 个答案:

答案 0 :(得分:0)

我找到了正确的订单,我会留给面向同​​样问题的未来开发人员。

Matrix.translateM(matrixView, 0, screenWidth / 2, screenHeight / 2, 0);
Matrix.scaleM(matrixView, 0, camZoom, camZoom, 1.0f);
Matrix.rotateM(matrixView, 0, camRotation, 0, 0, 1.0f);
Matrix.translateM(matrixView, 0, -camPosition.X, -camPosition.Y, 0);

请注意,这适用于View Matrix。对于模型矩阵,上面的代码工作正常。