【发布时间】:2014-03-01 13:10:07
【问题描述】:
我从 android opengl es 2.0 开始,并试图掌握这些概念。 我写了下面的函数来旋转一个矩形。通过使用rotateM 方法中的值,我成功地进行了一些旋转。但是我没有成功 对我的矩形进行一些具体的旋转,例如向右旋转 2D 45 度。
基本上,我正在盯着 android 参考,其中说明了以下内容;
rotateM(float[] m, int mOffset, 浮动 a, 浮动 x, 浮动 y, 浮动 z) 将矩阵 m 围绕轴 (x, y, z) 旋转角度 a(以度为单位)。
现在我知道我们提供了一个模型矩阵,这个矩阵中的偏移量和角度旋转,但是为什么我们必须提供 xyz 轴组件,这些值到底有什么作用?
希望有人可以给我一个关于rotateM方法的清晰解释,在此先感谢!
private void positionRectangleInScene() {
setIdentityM(modelMatrix, 0);
rotateM(
modelMatrix, // m : source matrix
0, // mOffset : index into m where the matrix starts
0f, // a : angle ato rotate in degrees
1f, // x : x-axis component
1f, // y : y-axis component
1f); // z : z-axis component
multiplyMM(
modelViewProjectionMatrix, 0,
viewProjectionMatrix, 0,
modelMatrix, 0);
}
【问题讨论】:
-
附带说明,
Matrix.rotateM()和Matrix.invertM()函数会分配额外的内存(以存储计算过程中的一些过渡数据)。如果您在每一帧上调用它们(以更新对象/相机位置),您最好根据它们的源代码和预先分配的临时变量来实现自己的函数。这将减少 GC 活动。就我而言,在我更换它们之后,onDrawFrame()中绝对没有内存分配,这使得帧速率更加平滑。
标签: android opengl-es-2.0