我通过遵循官方Android教程:http://developer.android.com/training/graphics/opengl/index.html开始使用OpenGL 2.0。基本上,我可以对我的游戏进行复制和粘贴,只使用几个彩色多边形:https://play.google.com/store/apps/details?id=de.timedout.mosaic.app
我在几个设备上测试了这款游戏,它是有效的。然而,我也刚刚在三星Galaxy S3 (Android 4.1.2)上测试了它,它只显示背景而没有多边形。但是,我没有得到任何错误消息。好吧,所以我回到了官方教程,并在Galaxy S3上测试了OpenGL 1.0和OpenGL 2.0的代码,结果是一样的:它绘制了背景,但没有多边形!与此同时,市场上的其他OpenGL基准测试在该设备上运行良好。这是否意味着来自教程的官方代码确实存在一些缺陷?-我是一个完全的OpenGL初学者,有人有这个问题的提示给我吗?
好的,我找到原因了。这些形状位于z=0.0f平面上。
static float triangleCoords[] = { // in counterclockwise order:
0.0f, 0.622008459f, 0.0f, // top
-0.5f, -0.311004243f, 0.0f, // bottom left
0.5f, -0.311004243f, 0.0f // bottom right
};
摄像机定义为:
Matrix.setLookAtM(mViewMatrix, 0, 0, 0, -3, 0f, 0f, 0f, 0f, 1.0f, 0.0f);
我知道相机和多边形在同一个z=0.0f平面上。在某些设备上,它可以显示对象,但在Galaxy S3上,GPU显然不会显示它们。
一个简单的解决方案是将相机稍微向后移动或将物体移到前景。我选择稍微移动对象:
static float triangleCoords[] = { // in counterclockwise order:
0.0f, 0.622008459f, 0.00001f, // top
-0.5f, -0.311004243f, 0.00001f, // bottom left
0.5f, -0.311004243f, 0.00001f // bottom right
};
现在它在我所有的设备上都很好用。