【发布时间】:2014-06-17 18:24:01
【问题描述】:
我正在尝试制作相机的视图矩阵并使其可缩放、可平移和可旋转。我期望工作的矩阵是。
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;
【问题讨论】:
-
你确定你应该在你的模型矩阵中通过
-origin.XY进行翻译,然后在稍后进行一些转换(或者更确切地说,如果你从上到下阅读它们,则更早的几行)由position.XY翻译?我希望在这里看到一个将对象放回 的翻译(这意味着通过 +origin.xy进行翻译),然后再翻译为position.xy为正常操作。或者,您可以将所有这些组合成一个翻译:position.xy + origin.xy. -
这是相机在不同功能中的位置 EDITED 表示
-
这仍然不能完全解决您的问题。我假设您将对象转换为
-origin.X,-origin.Y以便围绕某个点旋转它。但是您忽略了在将对象平移到其最终位置之前将其移回 。所以对象实际上现在放置在:position.X - origin.X, position.Y - origin.Y(假设所有 3 个坐标中的比例均为 1.0)。 -
因为我希望位置指向对象的中心。很像 XNA C#
-
我真的不明白这意味着什么。一个位置不能指向任何地方,它没有方向。
标签: opengl matrix camera opengl-es-2.0 matrix-multiplication