5

在 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 效果?

4

1 回答 1

4

Marmalades IwGXwraps并且它与thenOpenGL更相似,因为它不需要着色器。GLES 1.0GLES 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 上具有相似的性能

于 2012-12-28T20:31:57.747 回答