我开始使用OpenGL 2.0,遵循官方的Android教程:http://developer.android.com/training/graphics/opengl/index.html。基本上,我可以为我的游戏进行大部分复制和粘贴,只使用几个彩色多边形: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初学者,有人对我有这个问题的暗示吗?
答案 0 :(得分:2)
好的,我找到了原因。形状位于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
};
现在它在我的所有设备上都像魅力一样。我希望这可以帮助那些遇到同样麻烦的人。