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效果?
Marmalades IwGX包装,它与当时OpenGL更相似,因为它不需要着色器。GLES 1.0GLES 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);
Run Code Online (Sandbox Code Playgroud)
如果您使用GLES 2.0矩阵,则也可以在顶点着色器中计算。这可能比 CPU 更快。CPU与NEON说明在 iPhone 4S 上具有相似的性能