PETITE DÉMO OPENGL/C++ AVEC FPS

cs_goondy Messages postés 95 Date d'inscription jeudi 9 octobre 2003 Statut Membre Dernière intervention 7 janvier 2005 - 11 déc. 2004 à 22:20
Quicky24 Messages postés 29 Date d'inscription vendredi 5 décembre 2003 Statut Membre Dernière intervention 15 avril 2005 - 15 avril 2005 à 15:10
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/28137-petite-demo-opengl-c-avec-fps

Quicky24 Messages postés 29 Date d'inscription vendredi 5 décembre 2003 Statut Membre Dernière intervention 15 avril 2005
15 avril 2005 à 15:10
mon code ne marche pas sur XP fait chier ça!!
Quicky24 Messages postés 29 Date d'inscription vendredi 5 décembre 2003 Statut Membre Dernière intervention 15 avril 2005
9 mars 2005 à 21:23
ah oui j'ai oublié j'ai corrigé le bug: mais il est encore sur l'ordi.
Quicky24 Messages postés 29 Date d'inscription vendredi 5 décembre 2003 Statut Membre Dernière intervention 15 avril 2005
9 mars 2005 à 21:21
slt alesx tu compiles avec quel IDE?
Arnaud16022 Messages postés 1329 Date d'inscription vendredi 15 août 2003 Statut Membre Dernière intervention 16 juin 2010 2
21 févr. 2005 à 21:35
oui... il dit quoi le compilo?
mickbad Messages postés 71 Date d'inscription mercredi 17 juillet 2002 Statut Membre Dernière intervention 20 avril 2008
21 févr. 2005 à 09:47
salut,

Tu as essayé d'ajouter .h aux includes ?
Parfois les compilateurs n'acceptent pas ce genre de syntaxe:
#include

et tu peux nous écrire au moins un message d'erreur pour nous aiguiller ? :)

Mick
cs_Alesx Messages postés 20 Date d'inscription samedi 5 février 2005 Statut Membre Dernière intervention 6 juillet 2006
18 févr. 2005 à 17:05
Moi qui suis sur un projet similaire, j'me suis dit youhou ! voilà un chti gars super cool.

Mais en fait quand je compile le tout, j'ai un problème avec tous les include iostream, cstdio lib arg , list?

Sauriez vous pourquoi ?????
Quicky24 Messages postés 29 Date d'inscription vendredi 5 décembre 2003 Statut Membre Dernière intervention 15 avril 2005
15 déc. 2004 à 18:08
oh c vrai ils donnent pas, c'est "n.le_forestier@tiscali.fr"
Quicky24 Messages postés 29 Date d'inscription vendredi 5 décembre 2003 Statut Membre Dernière intervention 15 avril 2005
15 déc. 2004 à 18:06
Arnaud> bah tu cliques sur mon avar et tu auras mon e-mail.
Arnaud16022 Messages postés 1329 Date d'inscription vendredi 15 août 2003 Statut Membre Dernière intervention 16 juin 2010 2
14 déc. 2004 à 21:54
j'ai refait ton prog il marche impec now.
file moi ton mail que je te l'envoie
Arnaud16022 Messages postés 1329 Date d'inscription vendredi 15 août 2003 Statut Membre Dernière intervention 16 juin 2010 2
14 déc. 2004 à 21:26
G recompilé.
c'est zarbi ce truc.
mon exe fait 1 Mo optimisé au max.
le fps est bloqué, mais en aggrandissant la fenetre le vitesse diminue, ca devrait pas puisque le fps ne change pas...
??
Arnaud16022 Messages postés 1329 Date d'inscription vendredi 15 août 2003 Statut Membre Dernière intervention 16 juin 2010 2
14 déc. 2004 à 21:22
Naaaaan...
le but n'est pas de réguler le fps.
le but est d'avoir au contraire un fps le plus élevé possible, pour en conservant la meme vitesse de déplacement des spheres quelque soit le fps.
dans ton prog tu as une variable temps.
remplace e-=2 par e-=10*temps
(temps déclaré en global, c'est le cas je crois)
tu verras la ca marchera bien, meme en aggrandissant la fenetre la vitesse sera constante.
par contre ta maj refuse ded se lancer (la fenetre se crée mais n'affiche rien, et 600Ko pour un exe c'est gros je trouve.
Quicky24 Messages postés 29 Date d'inscription vendredi 5 décembre 2003 Statut Membre Dernière intervention 15 avril 2005
14 déc. 2004 à 13:57
Arnaud16022> j'ai modifié mon code et j'ai trouvé comment régulé les fps jusqu'a 60 et merci pour l'aide
:-)
goondy> tu as raison mais avec les textures ça va ralentir les FPS.

quicky24
mickbad Messages postés 71 Date d'inscription mercredi 17 juillet 2002 Statut Membre Dernière intervention 20 avril 2008
14 déc. 2004 à 08:54
Arnaud16022> salut,
de mémoire non pas vraiment mais les fonctions printf, sprintf, snprintf, vprintf, vsnprintf proviennent de "l'api" standard du C (stdio.h). Donc tu peux "logiquement" trouver les détails dans tout bon tutorial ou livre tel que "Le Language C" de Kernighan et Ritchie (livre référence de base même si ça date un peu ;)

Pour résumer un peu (de ce que tu sais certainement implicitement :) :
- printf te sert à afficher du texte formatée sur stdout (au même titre que fprintf(stdout ...))
- sprintf fait la même chose sauf que le flux est stocké dans une mémoire préalablement allouée
- snprintf (ce que j'utilise le plus en C) n'a de différence avec sprintf qu'avec la taille de sortie du flux : en gros, snprintf(buf, 256, "%d", 3) te place 3 dans buf mais sachant que si le texte formaté dépasse 256 caractères, il sera tronqué !
-vsprintf / vsnprintf : idem que sprintf et snprintf sauf que les arguments du texte formaté est sous la forme d'une liste (va_list) : utile qd tu es dans une fonction de type void foo(char* gnagna, ...) où tu ne connais pas le nombre d'argument. [l'exemple d'utilisation de vs[n]printf donné dans cette source (.h) est parfaite]

Voilà pour la théorie :)
En pratique l'utilisation de *nprintf est conseillé car tu es sur d'une chose : il n'y aura pas de débordement de capacité sur ta zone allouée (à moi que tu te trompes dans la taille à fournir :)))
Le risque : plantage de ton programme (et pas forcément à l'endroit de cette faute ... ça vient *toujours* plus tard à un endroit inattendu), mémoire non libéré entièrement => instabilité du prgm ou sysème, trou de sécurité (surtout si cette zone correspond à une entrée utilisateur qui peut injecter du code supplémentaire via ton interface)

Tout est relatif à l'échelle du programme naturellement ;)

Tiens de même avec string.h, il vaut mieux utiliser strncpy plutot que strcpy, strncat plutôt que strcat ...

au niveau des liens, je vais rechercher mais pas évident de trouver des comparatifs de fonctions standard

j'espère t'avoir répondu
MickBad
cs_goondy Messages postés 95 Date d'inscription jeudi 9 octobre 2003 Statut Membre Dernière intervention 7 janvier 2005
13 déc. 2004 à 19:22
Mouais c vrai que sur le coup j'avais pas capté ce qu'il voulait dire par changer les fps, j'ai pas pensé à le dire! lol
Arnaud16022 Messages postés 1329 Date d'inscription vendredi 15 août 2003 Statut Membre Dernière intervention 16 juin 2010 2
13 déc. 2004 à 19:12
oh et si on pouvait voir du dessus ca serait cool...
Arnaud16022 Messages postés 1329 Date d'inscription vendredi 15 août 2003 Statut Membre Dernière intervention 16 juin 2010 2
13 déc. 2004 à 19:11
ben voila c'est quand meme autre chose!
cependant quelques problemes encore:
la taille du .exe : 242Ko ca me parait gros... va voir dans l'aide du compilo comment optimiser ca.
la phrase 'pour accelerer les fps, appuyez sur f' ne veut RIEN dire, meme si ds le prog ca fait fps++;le probleme c'est que tu fais
glRotated(-e,0,1,0); e -= 2;
aieaieaie.
ce qu'il faudrait faire c'est
glRotated(-e,0,1,0); e -= DeltaTemps;
if(fps > 60) { fps -= 2.00; } ne sert a rien du tout (mais alors vraiement a rien...)
et voila...

mickbad -> t'as un lien sous le coude qui expliquerait la différence entre ces 2 fonctions plus précisément? merci.
Quicky24 Messages postés 29 Date d'inscription vendredi 5 décembre 2003 Statut Membre Dernière intervention 15 avril 2005
13 déc. 2004 à 15:31
merci de ces précisions MickBad.
quicky24
mickbad Messages postés 71 Date d'inscription mercredi 17 juillet 2002 Statut Membre Dernière intervention 20 avril 2008
13 déc. 2004 à 09:01
Bonjour,

Bonne source pour commencer effectivement mais manque alors quelques commentaires : un débutant peut ne pas comprendre du premier coup certaines instructions, non ? Tu en as mis je sais mais pour une source de démonstration : plus on met de commentaire, mieux c'est ;)))

D'autre part du point de vue technique de programmation (hors opengl tout de même car c'est limpide ce que tu as écris :), je te conseille d'utiliser dans Ecrire(GLdoubel, GLdouble, char*, ...) la fonction *vsnprintf* plutôt que *vsprintf*.

Pourquoi ? risque latent de débordement de capacité de ton buffer !

ce qui donne :
---------------------------------------------------
va_list args;
char buffer[255], *s;

va_start(args, format);
vsprintf(buffer, 255, format, args);
va_end(args);
---------------------------------------------------

C'est de la technique pure qui n'a rien à voir mais qui peut te servir un jour ;)

Enfin, évite de définir des fonctions dans le .h sauf si (en c++) c'est déclaré en tant que "inline".
Quoi rabajoie, héhé ... juste que si tu as plusieurs CPP utilisant ce .H à compiler et assembler ensuite, tu auras des erreurs de fonctions déjà définies (surtout avec gcc, mingw, ...)

Good job, guy ;)
MickBad
cs_goondy Messages postés 95 Date d'inscription jeudi 9 octobre 2003 Statut Membre Dernière intervention 7 janvier 2005
11 déc. 2004 à 22:20
Pour ceux qui veulent le lancer, télécharger glut ici : http://www.xmission.com/~nate/glut.html

dézipper et prendre glut32.dll pour le mettre dans C:\windows\system32

C bien pour commencer, mais t'as deux planètes qui se rentrent dedans, et tu devrais chercher des textures toutes faites pour les planètes ;)

Mais bon, c'est bien pour le début de l'OpenGL avec GLUT.
Rejoignez-nous