android opengl-es-2.0-rotateM解释

android opengl-es-2.0-rotateM解释,android,opengl-es-2.0,Android,Opengl Es 2.0,我从android opengl es 2.0开始,并试图掌握这些概念。 我在下面编写了旋转矩形的函数。我通过使用rotateM方法中的值成功地进行了一些旋转。然而,我没有成功 对我的矩形进行一些具体的旋转,例如向右旋转2D 45度 基本上,我是在关注android参考,它陈述了以下内容: rotateM(float[]m,int mOffset,float a,float x,float y,float z) 将矩阵m绕轴(x、y、z)旋转角度a(以度为单位) 现在我明白了,我们提供了一个模型

我从android opengl es 2.0开始,并试图掌握这些概念。 我在下面编写了旋转矩形的函数。我通过使用rotateM方法中的值成功地进行了一些旋转。然而,我没有成功 对我的矩形进行一些具体的旋转,例如向右旋转2D 45度

基本上,我是在关注android参考,它陈述了以下内容:

rotateM(float[]m,int mOffset,float a,float x,float y,float 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);
}

xyz值表示旋转轴。例如,围绕y轴的旋转将指定为
(m,0,角度,0,1,0)
。指定为(1,1,1)的值表示将围绕所有3个轴旋转,这不是一个典型用法。

这似乎有道理,我想知道为什么xyz轴使用浮点参数?看起来所有指定的都是0或1以指示绕轴旋转不我的意思是-想象一个从原点(0,0,0)到指定点xyz(x,y,z)的向量。对象将围绕该轴旋转。作为旁注,
Matrix.rotateM()
Matrix.invertM()
函数会进行额外的内存分配(以在计算过程中存储一些过渡数据)。如果您在每一帧上调用它们(以更新对象/相机位置),那么您最好根据它们的源代码和预先分配的临时变量来实现自己的函数。这将减少GC活动。在我的例子中,在替换它们之后,
onDrawFrame()
中绝对没有内存分配,这使帧速率变得更平滑。