x,可以先执行glTranslate,然后执行glRotate,以修改旋转中心的位置(即围绕给定点旋转)。据我所知,在OpenGL ES 2.0矩阵计算是在CPU端完成的。我正在使用IwGeom(来自Marmalade SDK) -一个典型的(可能)矩阵包。从文档:
IwGeom中的矩阵有效地采用4x3格式,包含3x3旋转和三分量矢量平移。
我发现用这种方法很难得到同样的效果。平移总是在旋转之后应用。此外,在Marmalade中,还可以设置模型矩阵:
IwGxSetModelMatrix( &modelMatrix );
显然,旋转和平移也是按一个顺序应用的:a)旋转,b)平移。
如何获取OpenGL ESx的影响?
Marmalades
IwGX
包裹OpenGL
,它更类似于GLES 1.0
GLES 2.0
,因为它不需要着色器。
glTranslate
和glRotate
修改视图矩阵。
你可以用
代替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更快。CPU
和NEON
指令在iPhone 4S上的性能相似