OpenGL figé

Signaler
Messages postés
20
Date d'inscription
dimanche 3 avril 2005
Statut
Membre
Dernière intervention
9 avril 2005
-
Messages postés
20
Date d'inscription
dimanche 3 avril 2005
Statut
Membre
Dernière intervention
9 avril 2005
-
Bonsoir à tous,



Je viens de lire les dix pages de sujets sur OpenGL du forum, et je
n'ai rien trouvé qui ressemble à ce que j'ai, je soumets donc mon
problème ici.



J'ai fait un programme OpenGL GLUT tout bête (un point qui traverse
l'écran), mais lorsque je stoppe l'exécution (fermeture du .exe) et que
je le relance une seconde fois, le point reste figé au même endroit que
là où il s'est arrêté lors de la première exécution.

D'où ma question : y'a-t-il besoin d'une commande pour signaler l'arrêt
d'un graphique OpenGL (sachant que j'utilise déjà un glEnd) ? Si oui,
où dois-je placer cette commande ?





Merci d'avance...

5 réponses

Messages postés
20
Date d'inscription
dimanche 3 avril 2005
Statut
Membre
Dernière intervention
9 avril 2005

J'ai oublié de préciser que le point se déplace à travers l'écran à l'aide d'un timer.



Et si ça peut aider, voici en gros mon code :



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

{



glutInit(&argc, argv);

glutInitDisplayMode(GLUT_RGBA | GLUT_DOUBLE);



glutInitWindowSize(640, 480);

glutInitWindowPosition(200, 200);

glutCreateWindow("Test");



glutDisplayFunc(Display);

glutReshapeFunc(Reshape);

glutTimerFunc(10,Timer,0);



cx = 0

cy = 0



glutMainLoop();



return 0;



}



void Timer(int value)

{



if (cx < 640 && cy < 480)

{

cx = cx + 1;

cy = cy + 1;



glBegin(GL_POINTS);

glColor3f(0, 0, 1);

glVertex2i(cx, cy);



glutSwapBuffers();

glutPostRedisplay();

}



else

{

glEnd();

glFlush();

Display();

cx = 0;

cy = 0;

}



glutTimerFunc(10, Timer, 0);



}
Messages postés
1329
Date d'inscription
vendredi 15 août 2003
Statut
Membre
Dernière intervention
16 juin 2010
2
ouie

heu...

ne me dis pas que tu as trouvé ce code tout fait je ne te croirais pas
(c'est pas plus mal remarque, pour une fois quon ne fait pas de copier
coller)



le main a l'air correct

mais le Timer...


void Timer(int value)

{



if (cx < 640 && cy < 480)

{

// changer le cx en cx++ ou cx+=1 ou mieux cx+= delta-temps;


cx = cx + 1;

cy = cy + 1;

// la tu m'apprends qqch, je connaissais pas le define GL_POINTS :o

glBegin(GL_POINTS);

glColor3f(0, 0, 1);

glVertex2i(cx, cy);



glutSwapBuffers();

// pas les deux ensemble


// glutPostRedisplay(); a virer

}



else // je cale pas trop ... ca c'est quand le prog se termine? ???!! de toute facon ca va pas

{




glEnd();// se met apres un
glBegin. si ce glGegin est celui qui est au dessus, ENLEVE CA, il faut
que ce soit dans la meme boucle;




glFlush(); // se met tout a la fin, quand on a fini d'afficher

Display();// ...

cx = 0; // ??.. enfin bon

cy = 0;

}



glutTimerFunc(10, Timer, 0); // hé ho une fois suffit, tu as déja déclaré ton timer dans main, enleve ca



}


bon je dis pas que ca va marcher mais ca peut que etrte mieux

++

ad


_______________________


Omnia vincit labor improbus
Messages postés
20
Date d'inscription
dimanche 3 avril 2005
Statut
Membre
Dernière intervention
9 avril 2005

Non en fait c'est bon, j'ai fini par me dépatouiller tout seul :)

Merci beaucoup quand-même, c'est sympa d'avoir pris le temps de m'aider !

Et en effet, j'ai fait le code comme je le sentais, je me suis juste basé sur les tutos du site web de Funto...

Et pour toutes les spécificités de l'OpenGL, je te renvoie à :
http://www.cppfrance.com/code.aspx?ID=11013 , il est très complet et
bien fait.



Merci encore, et @plus.
Messages postés
1329
Date d'inscription
vendredi 15 août 2003
Statut
Membre
Dernière intervention
16 juin 2010
2
oui je l'ai seulement les points en openGL c'est pas ce qu'il y a de
plus courant. (et puis de toute facon sur openGL j'ai plus grand chose
a apprendre)

c'est quoi qui allait pas alors?

_______________________


Omnia vincit labor improbus
Messages postés
20
Date d'inscription
dimanche 3 avril 2005
Statut
Membre
Dernière intervention
9 avril 2005

Ah, désolé d'avoir fait double emploi pour le tutorial ^^





Sinon le plus gros problème était qu'il fallait terminer le dessin par
glEnd() à chaque fois que j'avais fait un point, et non attendre que
tous les points soient tracés pour faire un glEnd()... Plus quelques
autres anomalies de code minimes que j'ai pu réparer.





Donc voilà, pour ça c'est réglé, mais je tombe sur un nouvel os (un peu
plus volumineux me semble-t-il), si tu as le temps de te pencher sur
mon cas, http://www.cppfrance.com/forum.v2.aspx?ID=428588



Merci encore pour ton aide :)