OpenGL ES 2.0(或Marmalade SDK),效果类似于OpenGL ES 1.x中的"glRotate()","glTranslation()"的顺序

Syd*_*nic 5 matrix opengl-es-2.0 marmalade

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

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

我发现使用这种方法很难获得相同的效果.旋转始终应用平移.此外,在Marmalade中,还可以设置模型矩阵:

IwGxSetModelMatrix( &modelMatrix );
Run Code Online (Sandbox Code Playgroud)

而且,显然,旋转和平移也按一个顺序应用:a)旋转,b)平移.

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

Max*_*Max 4

Marmalades IwGX包装,它与当时OpenGL更相似,因为它不需要着色器。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);
Run Code Online (Sandbox Code Playgroud)

如果您使用GLES 2.0矩阵,则也可以在顶点着色器中计算。这可能比 CPU 更快。CPUNEON说明在 iPhone 4S 上具有相似的性能