【问题标题】:android opengl-es-2.0 - rotateM explanationandroid opengl-es-2.0 - rotateM 解释
【发布时间】: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


【解决方案1】:

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

【讨论】:

  • 这似乎有道理,我想知道为什么 xyz 轴需要浮点参数?看起来您指定的只是 0 或 1 来指示绕轴旋转
  • 不是我的意思 - 想象一个从原点 (0,0,0) 到您指定的点 xyz (x,y,z) 的向量。对象将围绕该轴旋转。
猜你喜欢
  • 1970-01-01
  • 2012-04-08
  • 1970-01-01
  • 1970-01-01
  • 2012-02-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多