2012-01-27 5 views
0

Je rends la scène simple avec la bibliothèque GLESv1_CM sur Android avec NDK.Android NDK: coordonnées de lignes étranges dans OpenGL ES

void render(Rect viewport) 
{ 
    glViewport(viewport.left, viewport.top, viewport.Width(), viewport.Height()); 
    glClear(GL_COLOR_BUFFER_BIT); 
    glMatrixMode(GL_PROJECTION); 
    glLoadIdentity(); 
    glOrthof(viewport.left, viewport.right, viewport.top, viewport.bottom, -1, 1); 
    GLfloat points[] = { 5, 50, 1, 1, 1, 1, 
         7, 50, 1, 1, 1, 1, 
         7, 50, 1, 0, 0, 1, 
         7, 52, 1, 0, 0, 1, 
         8, 50, 0, 1, 0, 1, 
         10, 50, 0, 1, 0, 1}; 
    glEnableClientState(GL_VERTEX_ARRAY); 
    glEnableClientState(GL_COLOR_ARRAY); 
    glVertexPointer(2,GL_FLOAT,sizeof(GLfloat)*6,&points); 
    glColorPointer(4,GL_FLOAT,sizeof(GLfloat)*6,&points[2]); 
    glDrawArrays(GL_LINES,0,6); 
    glDisableClientState(GL_VERTEX_ARRAY); 
    glDisableClientState(GL_COLOR_ARRAY); 
} 

Je souhaite avoir trois traversèrent lignes, mais quand je le lance sur l'appareil avec Android 2.2 ou 3.2 i ai ceci:

screen from Android 2.2 device

Encore plus, sur émulateur Android avec Android 4 (mise à jour: même sur émulateur 2,3) j'ai ceci:

screen from Android 4 emulator

Est-il possible de faire ressemble sur cette photo sur tous les appareils avec toutes les versions Android sans utiliser opengl2?

wanted screen

Merci

Répondre

1

Selon the OpenGL FAQ pour ce type de projection:

Si pixelisation exacte est nécessaire, vous voudrez peut-être mettre un petit traduction dans la matrice MODELVIEW, tel qu'illustré ci-dessous:

glMatrixMode (GL_MODELVIEW); 
glLoadIdentity(); 
glTranslatef (0.375, 0.375, 0.); 

J'imagine que cela réduit la probabilité de problèmes d'arrondi.

+0

Malheureusement, cette solution ne fonctionne pas. Il ne fait que déplacer tous les points en haut à droite, comme il se doit. Je pense que ça a été écrit pour 2d sur 3d, et à la seconde, il a été écrit pour opengl2 et non pour opengl es. Mais merci pour le lien intéressant –

+0

Er, no. Si vous avez une projection orthographique dans laquelle les coordonnées du monde correspondent précisément aux pixels de l'écran, alors cet extrait de code s'ajuste par 0,375 d'un pixel. Il ne bougera certainement pas "tous les points en haut à droite". Peut-être avez-vous une matrice de visionneuse différente ... votre question initiale ne l'inclut pas, alors j'ai supposé que c'était la matrice d'identité. –

+0

ok, je corrige un peu mon code et maintenant ça marche. Pas aussi parfait que je le souhaite, mais beaucoup mieux. merci –