DEBUT DE JEU EN OPENGL

luhtor Messages postés 2023 Date d'inscription mardi 24 septembre 2002 Statut Membre Dernière intervention 28 juillet 2008 - 14 avril 2006 à 19:41
dPompei2 Messages postés 55 Date d'inscription samedi 27 mars 2004 Statut Membre Dernière intervention 1 septembre 2006 - 19 avril 2006 à 16:34
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/37038-debut-de-jeu-en-opengl

dPompei2 Messages postés 55 Date d'inscription samedi 27 mars 2004 Statut Membre Dernière intervention 1 septembre 2006
19 avril 2006 à 16:34
Pas de problème, j'étais débutant moi aussi un jours :)

Si t'as encore des questions ou besoin d'aide, demande moi par MP quand tu veux ;)
adess00 Messages postés 261 Date d'inscription vendredi 4 mars 2005 Statut Membre Dernière intervention 27 septembre 2008 1
19 avril 2006 à 03:36
ok merci pour ton aide dPompei2
Je vais essayer
dletozeun Messages postés 546 Date d'inscription vendredi 13 février 2004 Statut Membre Dernière intervention 9 janvier 2008 1
18 avril 2006 à 22:26
Looool ok...au temps pour moi!
Je me coucherais moins con ce soir!
dPompei2 Messages postés 55 Date d'inscription samedi 27 mars 2004 Statut Membre Dernière intervention 1 septembre 2006
18 avril 2006 à 20:24
ADESS00 je te donne un exemple de comment sa fonctionne:

mes_maths.h:
==========
#ifndef MES_MATHS_H
#define MES_MATHS_H

int addition( int a, int b );
int soustraction( int a, int b );

#endif /* MES_MATHS_H */

mes_maths_ou_meme_un_autre_nom.c:
===============================
#include "mes_maths.h"

int addition( int a, int b )
{
return a + b;
}

int soustraction( int a, int b )
{
return a - b;
}

main.c:
=====
#include "mes_maths.h"

int ma_variable_globale = 0;

int main( int, char ** )
{
int reponse = 0;
reponse = addition( 1, 1 );
reponse = soustraction( reponse, 1 );
return 0;
}

main.h:
=====
#ifndef MAIN_H
#define MAIN_H

extern int ma_variable_globale;

#endif /* MAIN_H */


maintenant dans chaque fichier ou tu utilises ma_variable_globale, tu dois faire #include "main.h" au debut ok ?

conseil: entoure toujours tes .h par les #ifndef #define et #endif, sa t'evitera des prolemmes ;)
cs_Kirua Messages postés 3006 Date d'inscription dimanche 14 avril 2002 Statut Membre Dernière intervention 31 décembre 2008
17 avril 2006 à 19:42
dletozeun Messages postés 546 Date d'inscription vendredi 13 février 2004 Statut Membre Dernière intervention 9 janvier 2008 1
17 avril 2006 à 16:46
lol je sens qu'il est en pleine detresse!
Moi je post juste pour dire que j'ai me bien le :

kirua-> "au temps pour moi"

pourquoi pas "Oh taon pour moi"
Variante " au tant pour mois" ?! lol j'arrete.Sinon ce serait mentir en cochant la case 'J'approuve la charte de bonne conduite que je viens de lire ci-dessus.'
luhtor Messages postés 2023 Date d'inscription mardi 24 septembre 2002 Statut Membre Dernière intervention 28 juillet 2008 6
16 avril 2006 à 13:09
Evidemment, mais si tu cherchais sur le net, tu n'aurais pas a attendre que qqn réponde.
dans ton fonction.h:
la définition

dans ton fonction.c
#include "fonction.h"

et l'implémentation de ta fonction.
adess00 Messages postés 261 Date d'inscription vendredi 4 mars 2005 Statut Membre Dernière intervention 27 septembre 2008 1
15 avril 2006 à 15:47
lol c pas grave
je l utilise et sa marche mais la j ai un autre probleme que je ne comprend vraiment pas

Sa deconne pour les fonctions. Il me sort undefined reference to Load
Pourtant j ai declarer ma f° Load dans fonction.h que main.c inclue donc et la fonction load se trouve dans chargement.c

Apparemment il ne trouve pas la fonction mas je ne comprend pas pourquoi ?
cs_Kirua Messages postés 3006 Date d'inscription dimanche 14 avril 2002 Statut Membre Dernière intervention 31 décembre 2008
15 avril 2006 à 15:45
Wouuuuuups, désolé, j'avais pas vu qu'il t'en parlait, je n'ai lu que jusque 2-3 messages avant le dernier, au temps pour moi.
cs_Kirua Messages postés 3006 Date d'inscription dimanche 14 avril 2002 Statut Membre Dernière intervention 31 décembre 2008
15 avril 2006 à 15:44
Pour rendre tes variables globales visibles depuis différents .c, renseigne-toi sur le mot clef "extern" du langage C, ça va faire des miracles :).

Bonne continuation!
luhtor Messages postés 2023 Date d'inscription mardi 24 septembre 2002 Statut Membre Dernière intervention 28 juillet 2008 6
14 avril 2006 à 23:35
Quand tu seras confrontés au problème des .h, tu comprendras :) que t'as pas le choix.
adess00 Messages postés 261 Date d'inscription vendredi 4 mars 2005 Statut Membre Dernière intervention 27 septembre 2008 1
14 avril 2006 à 22:54
vertex array ?
Jvenai de faire les display lists lol
C pas grave je verrai plus tard

Je comptai pas mettre une fonction par fichier mais je les regroupe juste
Pour l instant sa peut parraitre vide ouai mais j anticipe

J ai compris pour les .c mais ce qui est vraiment pas pratique je trouve c est d etre obligé de redeclarer les variables globales
Sa me fait vraiment prout sa

Bon j y retourne :)
luhtor Messages postés 2023 Date d'inscription mardi 24 septembre 2002 Statut Membre Dernière intervention 28 juillet 2008 6
14 avril 2006 à 22:13
Mais lol, je sais de quoi je parle.
"dans des .h au moins c est clair" ca, CA NE MARCHE PAS !
Si deux fichiers font appel au fichier .h, tu auras "error function redefined" ou un truc du genre.
Et par définition du ".h", tu vas pas avoir un ".h" par fonction !!
Si t'as 200 fonctions, tu vas pas te trimbaler avec 200 fichiers !
Moi je te parle pas d'un seul fichier. Je te dis de séparer tes fonctions dans un .c et tu mets les définitions de fonction dans le .h, mais tu ne sembles pas comprendre ce que je dis. Il faudrait que tu jettes un coup d'oeil aux tutoriaux C.

Sinon en effet, pour un morphing c'est pas utilisable les display list. Mais c'est pour ca qu'il existe les vertex array. C'est ca qu'il faut utiliser pour afficher des objets.
Juste pour te donner une idée, ca va 10 ou 100 vois plus vite que begin/end, ca dépend du nombre de polygones que tu affiches.

Pour tes variables globales. Tu les déclares en global dans ton fichier principal:
int x = 0;

puis dans tes fichiers .c:
extern int x;
adess00 Messages postés 261 Date d'inscription vendredi 4 mars 2005 Statut Membre Dernière intervention 27 septembre 2008 1
14 avril 2006 à 21:59
Ok maintenant je c a koi sa sert

D apres ce que tu me dit je doit mettre toutes mes fonctions dans un fichier.c
Mais sa va etre illisible !!! Jpourai pas m y retrouver
Et quand je fait plusieurs .c les variables globales ne marchent pas alors j ai mi mes fonctions dans des .h au moins c est clair
Pour l instant sa va mais quand je vais ameliorer mon prog le nombre de f° va augmenter et jpourrai pas m y retrouver dans un seul fichier

Il y a peut etre d autres methodes je sais pas

En tout cas merci de ton aide

Je viens de compreendre l utilité des playlists c est pratique pour un objet fixe mais pour du morphing sa reviendrai au meme muisqu il faudrait reconnstruire le polygon mais j en suis pas au deformations de mon vaisseau jvai donc le playlister pour l instant

a+ !
luhtor Messages postés 2023 Date d'inscription mardi 24 septembre 2002 Statut Membre Dernière intervention 28 juillet 2008 6
14 avril 2006 à 21:44
1 n'est pas un flottant. Ya des langages ou tu pourrais pas écrire ca:
float x = 1;
Ca provoquerait une erreur.
Bien sur tu peux mettre 1, mais c'est pas rigoureux. Et point de vue lisiblité, on voit pas que c'est un flottant autrement qu'en regardant le type de la variable.

Autrement, un ".h" c'est fait pour mettre des définitions de fonctions et pas des implémentations.
Donc toutes tes définitions tu les mets dans un fichier mes_fonctions.h par exemple puis toute les implémentation dans mes_fonctions.c.

Sinon, en effet, faut utiliser un timer. Un timer combiner a une vitesse de déplacement.
adess00 Messages postés 261 Date d'inscription vendredi 4 mars 2005 Statut Membre Dernière intervention 27 septembre 2008 1
14 avril 2006 à 21:33
voila un lien pour l exe
http://neuroshok.free.fr/LightReactor.exe

Euh oui mais je vois pas comment faire, faut utiliser un timer ? pour appeler la f° de dessin toutes les 1/25 secondes ?

Pourquoi je peux pas mettre dans les .h mes fonctions ?
Si je met tout dans main.c sa va etre bordelique nan ?

Jvai aller voir les dispays lists

Et pour les types ben pour moi 1 est un float et puis c pas pratique comme ecriture je trouve le 1.0f

Sinon merci de tes commentaires jvai chercher un tuto sur les display lists

a+
luhtor Messages postés 2023 Date d'inscription mardi 24 septembre 2002 Statut Membre Dernière intervention 28 juillet 2008 6
14 avril 2006 à 19:50
Bas pour l'améliorer, faudrait deja que tu évites que sur un pc qui affiche 500 images par seconde, ce soit injouable car beaucoup trop rapide.

Autre chose, les ".h" c'est pas fait pour mettre des fonctions dedans.

Autre chose:
for (i=0;i!=7616;i+=4)
{
glTexCoord2f(0,0);glVertex3f(model[i].x,model[i].y,model[i].z);
glTexCoord2f(0,1);glVertex3f(model[i+1].x,model[i+1].y,model[i+1].z);
glTexCoord2f(1,1);glVertex3f(model[i+2].x,model[i+2].y,model[i+2].z);
glTexCoord2f(1,0);glVertex3f(model[i+3].x,model[i+3].y,model[i+3].z);
}

Tu n'iras pas loin avec ce genre de chose. glBegin/glEnd, c'est totalement inefficace. Si tu débutes, regarde les display list, ou les vertex array.

Pour la rigueur, puisque le compilo C ne l'est pas:
glColor4f(1,1,1,1);
à remplacer par: glColor4f(1.0f,1.0f,1.0f,1.0f);
Meme si ca change pas grand chose. Faut juste respecter les types.

Aller ++
luhtor Messages postés 2023 Date d'inscription mardi 24 septembre 2002 Statut Membre Dernière intervention 28 juillet 2008 6
14 avril 2006 à 19:41
J'arrive pas a compiler, j'ai une erreur de lien sur wglDeleteContext@4. Je pige pas. Tu peux mettre un exe que tu renommes en .ex ?
Rejoignez-nous