Se connecter / S'enregistrer
Votre question

glut, opengl, vitesse et temps

Tags :
  • Opengl
  • Programmation
Dernière réponse : dans Programmation
10 Mars 2007 18:51:00

Bonjour a tous,
J'evolue un peu avec l'opengl ( j'utilise glut ), mais de petit problemes se posent a moi ( normal ;)  ):
Deja j'ai remarqué que la vitesse d'execution change selon la taille de la fenetre ( je fais bouger un cube sur une plateforme ... ) et plus la fenetre est grand plus c'est lent... je ne sais pas a quoi c'est du si qqn pouvait m'expliquer !
Je me demande donc si la vitesse du deplacement d'un cube ( avec glTranslatef ) change en fonction des capacités d'un ordi ?
Enfin voila j'ai vu pas mal de tuto qui explique la programmation en opengl mais pas vraiment a comment ca marche vraiment !
merci bien

Autres pages sur : glut opengl vitesse temps

a b L Programmation
10 Mars 2007 22:29:12

Tu n'as pas mis OpenGL en mode software au moins ?
Sinon, précise ton environnement de dev (OS et système d'affichage).

Le glTranslatef fonctionne normalement parfaitement. Peut-être devrais-tu nous montrer un bout de ton code ? :) 
12 Mars 2007 16:33:59

ben je pense pas que ce soit a cause de mon code je suis sous windows mais on m'a expliquer que c'etait simplement du au fait que plus la fenetre etait grand plus il y avait de pixels a afficher ( donc plus de calculs... )
Mais il n'y aurai pas moyen de diminuer le nombre de pixel ...
Et c'est quoi le mode software ?
Contenus similaires
a b L Programmation
12 Mars 2007 19:25:15

Citation :
ben je pense pas que ce soit a cause de mon code je suis sous windows mais on m'a expliquer que c'etait simplement du au fait que plus la fenetre etait grand plus il y avait de pixels a afficher ( donc plus de calculs... )

Attends, ça c'est vrai pour le software (comme les vieux jeux en 320x200). OpenGL utilise la carte graphique, et là ce n'est plus vraiment la taille qui pose problème mais le nombre de polygônes visibles.
D'ailleurs un jeu de type Quake3, tu peux le faire tourner en 1024x768 sans problème (après ça dépend de la carte).

OpenGL fonctionne en 2 modes : Hardware (en utilisant les fonctionnalités 3D de la carte graphique, c'est le mode par défaut pour une carte qui gère la 3D) ou en Software (sans utiliser la 3D des cartes graphiques, utilisé lorsque la carte graphique ne gère pas la 3D, comme ce fut le cas à une certaine époque). En mode software, tous les algorithmes (comme la Rasterization [je sais pas dire en français]) son réalisés par programme, c'est donc le CPU qui fait tous les calculs.

ça dépend vraiment de ton code car le problème que tu décris, peut survenir si :
- OpenGL est initialisé en mode "software" (ou que la carte graphique ne gère pas la 3D)
- Tu fais un passage sur tous les pixels (ce qui revient au même que le mode software, car c'est le CPU qui ferait la boucle et pas le GPU ! ).

En gros ce que je veux dire, c'est si le problème vient du nombre de pixel, c'est que quelque part, c'est le CPU et pas le GPU qui boucle sur tous les pixels.

Je pense qu'on t'a dit un peu n'importe quoi...
Pour préciser un peu, quelle est ta carte graphique ? Combien de polygones de base utilises-tu ? et utilises-tu des techniques particulières telles que vertex shader, pixel shaders ? Implémentes-tu un algorithme graphique particulier non géré par OpenGL ?
12 Mars 2007 21:34:01

Et bien je ne sais pas quelle est ma carte graphique elle est ancrée a la carte mere je crois ( ordinateur dell 512 Mo ), sinon voici mon code c'est peu etre bourin ou truffé d'erreurs ou de truc en trop:

#include <GL/glut.h>
#include <windows.h>
#include <stdio.h>
#include <stdlib.h>





char nom;
int cx=0,cy=0,cz=0,cr=0;
double key;
//translations et rotations
int av,ar,ga,dr;
double a;




GLuint tex;


GLubyte Texture[16] =
{
0,0,0,0, 0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF, 0,0,0,0
};

void InitGL()
{
glClearColor(0.5,0.5,1,0);
glEnable(GL_DEPTH_TEST);
glEnable(GL_TEXTURE_2D);
glGenTextures(1,&tex);
glBindTexture(GL_TEXTURE_2D,tex);
glTexImage2D (GL_TEXTURE_2D,0,4,2,2,0,GL_RGBA,GL_UNSIGNED_BYTE,Texture);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glHint(GL_PERSPECTIVE_CORRECTION_HINT,GL_NICEST);
}



//------------------------------------------------------------------------------
void deplacement()
{
if (av==1){cy+=1;}
if (ar==1){cy-=1;}
if (ga==1){cx-=1;}
if (dr==1){cx+=1;}

}
//------------------------------------------------------------------------------

void affichage()
{
deplacement();
glPushMatrix();
glClear(GL_COLOR_BUFFER_BIT |GL_DEPTH_BUFFER_BIT);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
gluLookAt(cx,-50+cy,8+cz,cx,cy,cz,0,1,0);
//plateforme
glBegin(GL_QUADS);
glTexCoord2i(-5,5);glVertex3f(-25,25,-3);
glTexCoord2i(5,5);glVertex3f(25,25,-3);
glTexCoord2i(5,-5);glVertex3f(25,-25,-3);
glTexCoord2i(-5,-5);glVertex3f(-25,-25,-3);
glEnd();




//cube
glPushMatrix();
glTranslatef(cx,cy,cz);
glRotatef(cr,0,0,1);
glBegin(GL_POLYGON);

glVertex3d(-3, 3, 3);
glVertex3d(-3, -3, 3);
glVertex3d( 3, -3, 3);
glVertex3d( 3, 3, 3);
glEnd();

glBegin(GL_POLYGON);

glVertex3d( 3, 3, -3);
glVertex3d( 3, -3, -3);
glVertex3d( -3, -3, -3);
glVertex3d( -3, 3, -3);
glEnd();

glBegin(GL_POLYGON);

glVertex3d( 3, 3, 3);
glVertex3d( 3, -3, 3);
glVertex3d( 3, -3, -3);
glVertex3d( 3, 3, -3);
glEnd();

glBegin(GL_POLYGON);

glVertex3d( -3, 3, 3);
glVertex3d( -3, 3, -3);
glVertex3d( -3, -3, -3);
glVertex3d( -3, -3, 3);
glEnd();

glBegin(GL_POLYGON);

glVertex3d( -3, -3, 3);
glVertex3d( -3, -3, -3);
glVertex3d( 3, -3, -3);
glVertex3d( 3, -3, 3);
glEnd();

glBegin(GL_POLYGON);

glVertex3d( -3, 3, 3);
glVertex3d( 3, 3, 3);
glVertex3d( 3, 3, -3);
glVertex3d( -3, 3, -3);
glEnd();





glLoadIdentity();

glutSwapBuffers();
glutPostRedisplay();
}


void touche_presse(int key, int x, int y)
{


switch (key)
{
case GLUT_KEY_UP:av=1;break;
case GLUT_KEY_DOWN:ar=1;break;
case GLUT_KEY_LEFT:ga=1;break;
case GLUT_KEY_RIGHT:D r=1;break;



}

}
void touche_relache(int key, int x, int y)
{
switch (key)
{
case GLUT_KEY_UP:av=0;break;
case GLUT_KEY_DOWN:ar=0;break;
case GLUT_KEY_LEFT:ga=0;break;
case GLUT_KEY_RIGHT:D r=0;break;


}

}





void Reshape(int width, int height)
{

glViewport(0,0,width,height);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluPerspective(60,float(width)/float(height),0.1,100);
glMatrixMode(GL_MODELVIEW);


}
void clavier(unsigned char key, int x, int y)
{
switch (key)
{
case 27:exit(0);break;
}
}




int main( int argc, char *argv[ ], char *envp[ ])
{

glutInit(&argc, argv);
glutInitDisplayMode(GLUT_RGBA | GLUT_DOUBLE | GLUT_DEPTH );
glutInitWindowPosition (0,0);
glutInitWindowSize(1145,800);


nom = glutCreateWindow("Glut");
glutReshapeFunc(Reshape);
glutDisplayFunc(affichage);
glutIgnoreKeyRepeat(1);
glutKeyboardFunc(clavier);
glutSpecialFunc(touche_presse);
glutSpecialUpFunc(touche_relache);

InitGL();


glutMainLoop();

return 0;

}


Voili ca fait un cube qu'on peut deplacer sur une plateforme bref vous verrez si vous compiler, pas besoin de fichiers anexes ..
a b L Programmation
12 Mars 2007 22:58:40

Si tu enlève "glHint(GL_PERSPECTIVE_CORRECTION_HINT,GL_NICEST); ", ça améliorera peut-être, mais tu auras peut-être le même comportement.
Sinon pour la carte graphique, il faudrait installer les derniers drivers (qui contiennent l'OpenGL), pour voir si ça fait une différence.
Tom's guide dans le monde
  • Allemagne
  • Italie
  • Irlande
  • Royaume Uni
  • Etats Unis
Suivre Tom's Guide
Inscrivez-vous à la Newsletter
  • ajouter à twitter
  • ajouter à facebook
  • ajouter un flux RSS