【问题标题】:OpenGL ES 2.0 (or Marmalade SDK), and effect similar to order of "glRotate()", "glTranslation()" in OpenGL ES 1.xOpenGL ES 2.0(或 Marmalade SDK),效果类似于 OpenGL ES 1.x 中“glRotate()”、“glTranslation()”的顺序
【发布时间】:2012-12-28 20:15:38
【问题描述】:

在 OpenGL ES 1.x 中,可以先执行 glTranslate,然后执行 glRotate,以修改旋转中心的位置(即围绕给定点旋转)。据我了解,在 OpenGL ES 2.0 中,矩阵计算是在 CPU 端完成的。我正在使用 IwGeom(来自 Marmalade SDK)——一个典型的(可能)矩阵包。来自文档:

IwGeom 中的矩阵实际上是 4x3 格式,包括 3x3 旋转和 3 分量矢量平移。

我发现使用这种方法很难获得相同的效果。翻译总是在旋转后应用。此外,在 Marmalade 中,还设置了模型矩阵:

IwGxSetModelMatrix( &modelMatrix );

而且,显然,旋转和平移也以一种顺序应用:a) 旋转,b) 平移。

如何获得OpenGL ES 1.x效果?

【问题讨论】:

    标签: matrix opengl-es-2.0 marmalade


    【解决方案1】:

    Marmalades IwGX 包裹 OpenGL 并且它更类似于 GLES 1.0 然后 GLES 2.0 因为它不需要着色器。

    glTranslateglRotate 正在修改视图矩阵。

    你可以替换为

    CIwFMat viewMat1 = IwGxGetModelMatrix();
    CIwFMat rot; rot.SetIdentity(); rot.SetRotZ(.....); // or other matrix rotation function
    CIwFMat viewMat2 = viewMat1; 
    viewMat2.PostMult(rot); // or viewMat2.PreMult(rot);
    IwGxSetModelMatrix(viewMat2);
    // Draw Something
    IwGxSetModelMatrix(&viewMat1);
    

    如果你使用GLES 2.0,那么矩阵也可以在顶点着色器中计算。这可能比 CPU 更快。 CPUNEON 指令在 iPhone 4S 上的性能相似

    【讨论】:

    • 我可以要求澄清吗?如何包括翻译?或者换句话说,如何围绕点(x,y,z)旋转?
    • 这是您的公式:V2 = V1 * R * T 我有一段时间没有使用 IwGx,但我几乎可以肯定 M1 = M1 * M2M1.PostMult(M2)M1 = M2 * M1M1.PreMult(M2)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多