2014-07-05 1 views
0

J'ai commencé à utiliser OpenGL 2.0 en suivant le didacticiel officiel d'Android: http://developer.android.com/training/graphics/opengl/index.html. Fondamentalement, je pourrais faire la plupart du temps copier et coller pour mon jeu qui utilise seulement quelques polygones colorés: https://play.google.com/store/apps/details?id=de.timedout.mosaic.appProblèmes OpenGL sur Android (Galaxy S3) - ne pas dessiner des polygones pour le didacticiel officiel

J'ai testé le jeu sur plusieurs appareils et cela a fonctionné. Cependant, je viens aussi de le tester sur un Samsung Galaxy S3 (Android 4.1.2) et là il ne montre que l'arrière-plan et pas de polygones. Cependant, je ne reçois aucun message d'erreur. Ok, donc je suis retourné au tutoriel officiel et j'ai testé le code pour OpenGL 1.0 et OpenGL 2.0 sur le Galaxy S3 ce qui conduit au même résultat: il dessine l'arrière-plan mais pas de polygones! Dans le même temps d'autres benchmarks OpenGL du marché fonctionnent bien sur l'appareil. Cela signifie-t-il que le code officiel du didacticiel a un défaut? - Je suis un débutant total OpenGL, est-ce que quelqu'un a un indice pour moi avec ce problème?

Répondre

2

Ok, j'ai trouvé la raison. Les formes sont positionnées sur le plan 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 
}; 

La caméra est défini comme:

Matrix.setLookAtM(mViewMatrix, 0, 0, 0, -3, 0f, 0f, 0f, 0f, 1.0f, 0.0f); 

Je crois que la caméra est sur le même plan z = 0.0f que les polygones. Sur certains appareils, il affiche les objets, sur le Galaxy S3, le GPU ne les affiche évidemment pas.

Une solution simple consiste à déplacer légèrement la caméra vers l'arrière ou l'objet vers l'avant-plan. J'ai choisi de déplacer les objets légèrement:

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 
}; 

Maintenant, cela fonctionne comme un charme sur tous mes appareils. J'espère que cela peut aider quelqu'un qui a le même problème.

Questions connexes