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



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,因为它不需要着色器。

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上的性能相似

最新更新