Application 3D et performance OpenGL

bathof Messages postés 28 Date d'inscription jeudi 5 mai 2005 Statut Membre Dernière intervention 31 janvier 2009 - 27 mai 2007 à 02:12
luhtor Messages postés 2023 Date d'inscription mardi 24 septembre 2002 Statut Membre Dernière intervention 28 juillet 2008 - 27 mai 2007 à 21:32
Bonjour,

Je suis en train de développer une application 3D et j'ai constaté que les
performances 3D n'était pas excellentes, j'ai l'impression que OpenGL
utilise uniquement le CPU pour le calcule du rendu 3D, cela est-il possible ?

Par exemple, si j'affiche un rectangle de la manière suivante avec de l'alpha
sur ma scène 3D, mon frame rate diminue très fortement, cela est-il normal ?

 //-----------------------------------------------------------------------------
 // Faire passer OpenGL en 2D pour afficher le rectangle
 // de sélection
 //
 // Désactivation du cull face
    glDisable(GL_CULL_FACE);
 
 // Sauver la matrice GL_MODELVIEM courante && Effacer la matrice
    glMatrixMode( GL_MODELVIEW );
    glPushMatrix();
    glLoadIdentity();
 
 // Sauver la matrice GL_PROJECTION courante && Effacer la matrice
    glMatrixMode( GL_PROJECTION );
    glPushMatrix();
    glLoadIdentity();


 // Lecture du viewport
    GLint viewport[4];
    glGetIntegerv( GL_VIEWPORT, viewport );
 
 // On initialise la projection de façon a ce que les coordonnées
 // correspondent au pixel
    gluOrtho2D( 0.0, viewport[2], 0.0, viewport[3] );
 
 //-----------------------------------------------------------------------------
 // Dessiner le rectangle de selection
 //
    glBegin(GL_QUADS);
   
    glColor4f ( color.r, color.g, color.b, 0.5f );
    glVertex2f( fixPos.x,   viewport[3] - fixPos.y );
    glVertex2f( mousePos.x, viewport[3] - fixPos.y );
   
    glColor4f ( color.r, color.g, color.b, 0.5f   );
    glVertex2f( mousePos.x, viewport[3] - mousePos.y );
    glVertex2f( fixPos.x,   viewport[3] - mousePos.y );
 
    glEnd();
 
 // Afficher les lignes autours du rectangle
    glBegin(GL_LINE_LOOP);
   
    glColor4f ( color.r, color.g, color.b, 0.9f );
    glBegin(GL_LINE_LOOP);
    glVertex2f( fixPos.x,   viewport[3] - fixPos.y );
    glVertex2f( mousePos.x, viewport[3] - fixPos.y );
    glVertex2f( mousePos.x, viewport[3] - mousePos.y );
    glVertex2f( fixPos.x,   viewport[3] - mousePos.y );
    glEnd();
 
 //-----------------------------------------------------------------------------
 // Revenir aux matrices précedentes
 //
 // Retablire l'encienne matrice de projection
    glPopMatrix();
   
 // Retablire la matrice MODELVIEW
    glMatrixMode( GL_MODELVIEW );
    glPopMatrix();
 
    glEnable(GL_CULL_FACE);

Merci d'avance pour vos réponses.

6 réponses

luhtor Messages postés 2023 Date d'inscription mardi 24 septembre 2002 Statut Membre Dernière intervention 28 juillet 2008 6
27 mai 2007 à 02:21
Les fonctions openGL glVertex* vont sans doute disparaitre, tellement les performances sont catastrophiques.
Renseigne toi sur les vbos (Vertex Buffer Object):
http://www.g-truc.net/article/vbo-fr.pdf

Tu obtiendrais des perfs de fou avec 0% cpu.
0
bathof Messages postés 28 Date d'inscription jeudi 5 mai 2005 Statut Membre Dernière intervention 31 janvier 2009
27 mai 2007 à 15:24
Salut,

Merci pour ta réponse, mais j'ai un problème que je n'arrive pas à résoudre.

J'ai installer la librairie "glew" pour pouvoir utiliser les "VBO", mais quand
j'appelle la fonction "glGenBuffers(GLEW_BUFFER_SIZE, glewBufferName);" mon
programme plante (il génère des erreurs).

Avant d'appeler la fonction « glGenBuffers » j'initialise correctement "glew" avec la fonction « glewInit() ».
0
bathof Messages postés 28 Date d'inscription jeudi 5 mai 2005 Statut Membre Dernière intervention 31 janvier 2009
27 mai 2007 à 16:27
Si je crée un fenetre OpenGL avec SDL je n'ai aucun problème avec glGenBuffers,
par contre si je crée une fenêtre OpenGL avec l'API windows je rencontre le problème.

Je dois faire faux dans une initalisation d'OpenGL mais je ne vois pas quoi.
0
bathof Messages postés 28 Date d'inscription jeudi 5 mai 2005 Statut Membre Dernière intervention 31 janvier 2009
27 mai 2007 à 17:32
J'ai trouvé quelques chose qui pourrait aider. Après l'initalisation avec "glewInit();"
si je test "GLEW_ARB_vertex_buffer_object", il est égale a NULL.

Pourtant si j'initaliser avec SDL, "GLEW_ARB_vertex_buffer_object" n'est pas
égale a NULL.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
bathof Messages postés 28 Date d'inscription jeudi 5 mai 2005 Statut Membre Dernière intervention 31 janvier 2009
27 mai 2007 à 18:38
J'ai trouvé le problème, lol, c'etait juste un problème de version des DLLs d'OpenGL.
0
luhtor Messages postés 2023 Date d'inscription mardi 24 septembre 2002 Statut Membre Dernière intervention 28 juillet 2008 6
27 mai 2007 à 21:32
De toute facon, j'aurais pas pu t'aider, j'ai toujours utiliser que Glut.
0