FORUM PS3, PSP & PS2 » Making Of » OpenGL - Dev-C++

En ligne > Il y a 51 utilisateurs connus et inconnus. Pour voir la liste des connectés connus, cliquez ici

 Mot :   Pseudo :  
 
 Page :  1  2  3
OpenGL - Dev-C++
 
n°2047
Profil : Rédacteur PF
Posté le 27-03-2007 à 14:19:04   answer
 

Reprise du message précédent :
Vous m'avez donné l'envie de m'y remettre :sweat:  
 
Autrement, je souhaiterai pouvoir concevoir des modèles complexes par un log de 3D. Lequel s'en sort bien pour une exportation vers OpenGl ?


---------------
Toute l'actualité PS3, PSP et PS2 sur Playfrance.com
 
PSN : Halouf
Wii : 8216 1846 7242 3813
n°2048
Profil : Internaute
Posté le 27-03-2007 à 19:37:53   answer
 

J'ai bien progréssé finalement,il me reste encore 2,3 choses à régler et je pense que ce sera bon :
 
-Est-il possible de controler la lumiere,je voudrais créer un soleil non visible pour l'instant,qui reflete les billes sur le sol? J'ai tenté d'influencer les parametres dans glLightiv(GL_LIGHT0,GL_POSITION,LightPos) de LightPos avec les touches du clavier mais ça ne marche pas car le GLLight accepte un tableau de contances.....J'essaye pas à pas mais c'est pas vraiment tres éffiace(j'ai du mal à me repérérer déja),je trouve également l'éclairage tres tres faibles de la zone, j'ai mis un éclairage ponctuel (pour simuler un soleil) mais seul une petite partie de la scene est éclairé est du à la distance de la lumière par rapport à la scène
 
Koren => merci pour tes conseils j'ai bien avancé ;)

n°2049
Profil : Modérateur
Posté le 28-03-2007 à 01:14:12   answer
 

zell789 a écrit :

-Est-il possible de controler la lumiere,je voudrais créer un soleil non visible


Il n'y a pas de façon simple de faire un soleil "visible". La seule façon de le bidouiller, c'est de dessiner une sphèe à l'endroit de la lumière en désactivant la lumière elle-même au moment du tracé (sinon on risque d'avoir des soucis vu que la source est dedans) ou en la redéclarant en ambiante.
 

zell789 a écrit :

pour l'instant,qui reflete les billes sur le sol?


Je suppose que tu veux un éclat sur les boules, parce que les reflets (type miroir ou illumination globale), ce n'est pas "faisable" automatiquement en OpenGL. Au passage, il est important si tu fais ça pour avoir un bon résultat de définir un matériau pour tes objets.
 

zell789 a écrit :

J'ai tenté d'influencer les parametres dans glLightiv(GL_LIGHT0,GL_POSITION,LightPos) de LightPos avec les touches du clavier mais ça ne marche pas car le GLLight accepte un tableau de contances...


Non, il demande un pointeur constant vers un tableau. Les valeurs du tableau peuvent tout à fait être variables...
 

zell789 a écrit :

je trouve également l'éclairage tres tres faibles de la zone


C'est souvent le cas. En général, on met au minimum un paramètre de lumière ambiante de (0.5, 0.5, 0.5) par exemple. Ca évite les coins sombres dans la scène. Puis tu peux mettre une lumière diffuse importante (genre (1.0, 1.0, 1.0)) pour avoir des effets de lumière. Donc deux glLight(), l'un avec GL_AMBIANT, l'autre avec GL_DIFFUSE.
 

zell789 a écrit :

j'ai mis un éclairage ponctuel (pour simuler un soleil) mais seul une petite partie de la scene est éclairé est du à la distance de la lumière par rapport à la scène


Tu as du mal à placer la source ou tu veux ? Tu as pensé que la position d'une source de lumière, c'est un vecteur à QUATRE coordonnées ? La dernière doit être à 1.0 si tu as un source ponctuelle, et 0.0 si tu as une source éloignée à l'infini (auquel cas, les trois autres paramètres indiquent la direction).
 
Tu peux aussi jouer avec GL_SPOT_* si tu veux une lumière directionnelle (pratique pour faire des lampes de bureau ou des torches ;)
 

zell789 a écrit :

Koren => merci pour tes conseils j'ai bien avancé ;)


Pas de problème... Désolé de répondre si tard, j'ai bossé une bonne partie de la soirée.

n°2050
Profil : Internaute
Posté le 28-03-2007 à 18:57:14   answer
 

je viens juste de rentrer du concour de l'école,je suis méga en retard pour mon projet surtout que je dois préparer un controle de matématique sur les équa diffs et les valeurs propres :(
 
Merci Koren pour tes conseils ;)
 

Citation :

Tu as du mal à placer la source ou tu veux ? Tu as pensé que la position d'une source de lumière, c'est un vecteur à QUATRE coordonnées ? La dernière doit être à 1.0 si tu as un source ponctuelle, et 0.0 si tu as une source éloignée à l'infini (auquel cas, les trois autres paramètres indiquent la direction).


 
Je suis finalement arrivé à placer ma lumiere de maniere appropriée par contre je n'ai pas d'ombre,mais ça a l'air compliqué non? Je n'ai plus trop le temps là (surtout que les maths c'est tout aussi important!)
 

Citation :

Pas de problème... Désolé de répondre si tard, j'ai bossé une bonne partie de la soirée.


 
Tu n'as pas t'excuser,je trouve ça très sympahtique de ta part que tu me donnes des conseils pour les problemes que j'ai rencontré.Et j'ai pas trop envie de te déranger,alors je preferes que tu fasses les choses importantes a tes yeux d'abord (j'arrive pas trop à formuler tellement fatigué arf) ;)
 

n°2051
Profil : Modérateur
Posté le 28-03-2007 à 21:49:04   answer
 

zell789 a écrit :

Je suis finalement arrivé à placer ma lumiere de maniere appropriée par contre je n'ai pas d'ombre,mais ça a l'air compliqué non?


Si tu veux de vraies ombres, c'est très très compilqué, oui. Ca demande une très bonne maîtrise de l'OpenGL. Sinon, tu peux simplement dessiner un disque semi-transparent noir au bon endroit juste au-dessus du sol... c'est ce que beaucoup de jeux font !
 
 
Quant à moi, j'ai absolument moyen de faire tourner un truc en OpenGL, mais :
 
- j'ai un ordi qui me répond

Code :
  1. R300 DRI driver expected DRM version 1.24.x but got version 1.22.0
  2. libGL warning: 3D driver returned no fbconfigs.
  3. libGL error: InitDriver failed
  4. libGL error: reverting to (slow) indirect rendering


et n'affiche rien du tout (vive Linux)
 
- j'ai un autre ordi sous Windows dans lequel je n'ai pas envie d'installer OpenCV à la main
 
Et par ailleurs, j'aimerais savoir comment je peux avoir un résultat différent pour cvInvert selon que j'utilise CV_LU ou CV_SVD, et pourquoi un printf d'une variable est différent selon la position du return 0; dans le mail, placé *après* le printf, évidemment (ie problème d'écrasement de données par un truc qui doit être strippé à la compilation quand je sors prématurément  
 
:cry:

n°2052
Profil : Internaute
Posté le 28-03-2007 à 22:35:53   answer
 

Koren =>Je vais juste créer une caisse,mettres quelques objets et je passe au mathématique...


Message édité par zell789 le 28-03-2007 à 22:59:09
n°2053
Profil : Internaute
Posté le 28-03-2007 à 22:42:32   answer
 

Koren a écrit :


et pourquoi un printf d'une variable est différent selon la position du return 0; dans le mail, placé *après* le printf, évidemment (ie problème d'écrasement de données par un truc qui doit être strippé à la compilation quand je sors prématurément  
:cry:


Pff, quitte a debuguer a coup de log, aies la descence de le faire a coup de write (ou de mettre un fflush) :P

Message cité 1 fois
Message édité par skyfighter le 28-03-2007 à 22:44:03

---------------
1f u c4n r34d th1s u r34lly n33d t0 g37 l41d.
1f u c4n wr1t3 1t t00.
n°2054
Profil : Modérateur
Posté le 29-03-2007 à 00:31:40   answer
 

skyfighter a écrit :

Pff, quitte a debuguer a coup de log, aies la descence de le faire a coup de write (ou de mettre un fflush) :P


Je peux le faire à coup de fwrite, de gdb ou de mon propre logiciel de debug (à coup de messages via socket), ça ne change rien (et le flush encore moins). J'ai un débordement important, fourbe, et qui dépend d'une partie qui n'est pas incluse dans le binaire quand je vire la fin du fichier. C'est le exit précoce qui fait que ça marche, parce qu'il ne doit pas inclure certaines fonctions. Qu'elles soient exécutées ou non n'a aucune espèce d'importance, le truc, c'est qu'elles soient présentes dans le binaire ou non.
 
Bref, un vrai gros bug étrange et chiant à trouver comme le C sait les faire. J'ai fini par écrire la matrice dans un fichier avec un exit précoce, et la recharger dans le programme plutôt que de la calculer. Certes, ça fait crade, mais je suis pressé.

n°2055
Profil : Internaute
Posté le 29-03-2007 à 22:46:41   answer
 

Le projet a été repoussé d'une semaine,cela me permettra de paufiner le programme car il y avait encore des problèmes genant et avec tout les DST et la fatigue (je suis tombé malade) il m'était impossible de pouvoir tout faire !

n°2056
Profil : Internaute
Posté le 31-03-2007 à 02:13:24   answer
 

+1

n°2060
Profil : Rédacteur en Chef PF
Posté le 05-04-2007 à 00:52:41   answer
 

Dis Koren, ca fait un moment que je n'ai pas verifie les ameliorations de performances des drivers de ma carte mais es-tu sur que glDrawPixels est plus rapide qu'un quad texture? Il y a 3-4 ans de cela ce n'etait vraiment pas du tout le cas.

n°2061
Profil : Internaute
Posté le 05-04-2007 à 09:23:26   answer
 

Koren a écrit :

Je peux le faire à coup de fwrite, de gdb ou de mon propre logiciel de debug (à coup de messages via socket), ça ne change rien (et le flush encore moins). J'ai un débordement important, fourbe, et qui dépend d'une partie qui n'est pas incluse dans le binaire quand je vire la fin du fichier. C'est le exit précoce qui fait que ça marche, parce qu'il ne doit pas inclure certaines fonctions. Qu'elles soient exécutées ou non n'a aucune espèce d'importance, le truc, c'est qu'elles soient présentes dans le binaire ou non.
 
Bref, un vrai gros bug étrange et chiant à trouver comme le C sait les faire. J'ai fini par écrire la matrice dans un fichier avec un exit précoce, et la recharger dans le programme plutôt que de la calculer. Certes, ça fait crade, mais je suis pressé.


Arf oui ca a l'air fun...
Surtout que la pour le coup les seuls trucs executes en plus c'est des destructeurs de variables locales du main des symboles de fin des bibliotheques...
Tu es sous quel systeme / stdlib :??:  
Parce que bon... pour avoir code un malloc sous Unix, y'a des bibliotheques standards qui ont des comportements folkloriques. Genre sous NetBSD, le buffer est alloue dynamiquement a la premiere ecriture...


---------------
1f u c4n r34d th1s u r34lly n33d t0 g37 l41d.
1f u c4n wr1t3 1t t00.
n°2062
Profil : Modérateur
Posté le 05-04-2007 à 12:01:35   answer
 

Eric a écrit :

Dis Koren, ca fait un moment que je n'ai pas verifie les ameliorations de performances des drivers de ma carte mais es-tu sur que glDrawPixels est plus rapide qu'un quad texture? Il y a 3-4 ans de cela ce n'etait vraiment pas du tout le cas.


En fait, ça dépend... Sur le fond, les deux font à peu près la même chose (avec le positionnement en moins pour glDrawPixels). La différence de vitesse, elle vient surtout du fait que la texture est dans la mémoire vidéo, le buffer de pixels dans la mémoire centrale.
 
Donc fatalement, assez souvent, le glDrawPixels est moins rapide parce qu'il dépend du bus, de la mémoire, et de ce que fait la machine le reste du temps. Maintenant, selon que tu affiches toujours le même ou que tu changes à chaque image, ça ne donnera pas le même résultat (en gros, si tu veux les comparer, il faut comparer le glDrawPixels au draw texturé + le glTexImage2d...)
 
Cela dit, l'intérêt du glDrawPixels, il n'est pas dans la vitesse (souvent, pour ce genre de projet, ce n'est pas une question de vitesse) mais dans la facilité. Il est un peu moins nécessaire de jouer avec la caméra et les coordonnées du Quad. Et puis, si l'image n'est pas de la forme 2^n x 2^n, tu n'as pas à jouer à la retailler...
 
Par ailleurs, sur ma machine précédente, il y avait un bug (connu et courant) sur le texturing openGL qui faisait qu'il était assez lent, de toute façon. Qui plus est, sur un portable où la mémoire vidéo est partagée, tu n'as pas le gain en perf de la texture dans la mémoire vidéo.
 
Voilà :)  
 
Enfin bref, je ne recommandais pas cette solution pour des questions de performances, mais plutôt de facilité.

n°2063
Profil : Modérateur
Posté le 05-04-2007 à 12:03:00   answer
 

skyfighter a écrit :

Arf oui ca a l'air fun...
Surtout que la pour le coup les seuls trucs executes en plus c'est des destructeurs de variables locales du main des symboles de fin des bibliotheques...


Vi, c'est délicat à localiser...
 

skyfighter a écrit :

Tu es sous quel systeme / stdlib :??:


Sous une Debian GNU Linux (testing standard à jour)...

n°2064
Profil : Internaute
Posté le 05-04-2007 à 18:18:05   answer
 

J"ai repris mon projet OpenGL et j'ai une question :  
 
-QUand je lance une rotation,mon objet ne tourne pas sur lui même mais autour d'un axe,de plus ce sont tout les objets qui tournent !!Or je voudrais juste qu'il tourne sur lui même,je ne comprend pas si je construis un objet,il tourne sur lui même mais des que j'en met plus d'une certain quantité ils tournent tous ensemble!!!
 
On m'a dit qu'il fallait ancré l'objet via une translation mais je ne comprend pas vraiment !!
 
Merci d'avance

n°2066
Profil : Modérateur
Posté le 05-04-2007 à 21:21:23   answer
 

zell789 a écrit :

J"ai repris mon projet OpenGL et j'ai une question :  
 
-QUand je lance une rotation,mon objet ne tourne pas sur lui même mais autour d'un axe,de plus ce sont tout les objets qui tournent !!Or je voudrais juste qu'il tourne sur lui même,je ne comprend pas si je construis un objet,il tourne sur lui même mais des que j'en met plus d'une certain quantité ils tournent tous ensemble!!!
 
On m'a dit qu'il fallait ancré l'objet via une translation mais je ne comprend pas vraiment !!
 
Merci d'avance


Ce n'est pas forcément facile à expliquer, mais je vais essayer. Quand tu indiques une translation avec OpenGL, il tourne le repère courant, pour faire simple. Je ne sais pas si tu as fait du Logo, mais en gros, ça correspond en quelque sorte à tourner la souris de Logo.
 
Du coup, si tu fais une rotation, l'objet que tu traces après sera tourné... mais aussi tous ceux qui suivent. Par ailleurs, les translations qui suivent sont aussi "tournées", donc ça devient un cauchemar.
 
En gros, si tu veux une solution pas trop compliquée :
- tu te places normalement avec une translation
- tu tournes le repère
- tu traces l'objet
- tu tournes le repère exactement dans l'autre sens pour annuler
- tu utilises une translation pour aller vers l'objet suivant
 
Là où ça devient délicat, c'est si l'objet ne tourne pas autour du point qui t'intéresse, auquel cas il faut encore ajouter d'autres translations. Mais là, ça devient des maths...

n°2068
Profil : Internaute
Posté le 05-04-2007 à 21:47:32   answer
 

Citation :

En gros, si tu veux une solution pas trop compliquée :
- tu te places normalement avec une translation
- tu tournes le repère
- tu traces l'objet
- tu tournes le repère exactement dans l'autre sens pour annuler
- tu utilises une translation pour aller vers l'objet suivant


 
Cela ressemble beaucoup au mathématique que j'ai vu cette année commme les matrices de rotation qui permettait de faire tourner un objet sans qu'il soit au centre de  l'axe bref ce sont des mathématiques (maintenant que tu me dis la personne m'a aussi dis qu'il fallait procéder mathématiquement pour que l'objet tourne sur soi même !
 
Pas facile tout ça ! Surtout que je suis une quiche en math!

n°2069
Profil : Modérateur
Posté le 05-04-2007 à 22:01:07   answer
 

zell789 a écrit :

Cela ressemble beaucoup au mathématique que j'ai vu cette année commme les matrices de rotation qui permettait de faire tourner un objet sans qu'il soit au centre de  l'axe


Bon, ben j'ai le regret de te dire que c'est exactement ça :mdr:
 
En gros, OpenGL se souvient d'une* matrice M 4x4. Tous les points sont des vecteurs v à 4 coordonnées.
 
Première chose, glLoadIdentity() -> on place l'identité dans M
Ensuite, toutes les commandes vont modifier cette matrice...
 
Par exemple, glTranslate(x, y, z) produit la matrice T
1 0 0 x
0 1 0 y
0 0 1 z
0 0 0 1
et remplace M par le produit de M avec T
 
Ca correspond en pratique à une translation du repère. Idem pour les instructions de projection, de rotation, de redimentionnement, etc.
 
Si OpenGL a besoin d'afficher un point décrit par un vecteur v, il calcule M.v ce qui lui donne un vecteur v'. Les coordonnées de v' (X, Y, Z, T) fournissent les coordonnées écran : X/T et Y/T et la profondeur Z/T (pour le Z-buffer).
 
Bon, très schématiquement. En pratique, on peut s'en servir sans savoir comment ça marche, mais on merde un peu parfois pour comprendre dans quel sens ça tourne :mdr:
 
 
* (en fait deux, GL_PROJECTION et GL_MODELVIEW, mais bon... pour ton projet, si cette subtilité n'est pas évidente, ce n'est pas un problème)

n°2070
Profil : Internaute
Posté le 05-04-2007 à 22:11:26   answer
 

On m'a aussi recoomande de faire un GLoadIdentity si tu explique que les Matrices se multiplie a cahque transformation alors en fesant une GLoadIdentity ne reviendrait-on pas au centre de l'origine?
 
De toute facon j'ai tenté de faire un LoadIdentity avant les rotations mais tout les objets avait disparu peut etre à cause du repositionnement ??

n°2071
Profil : Modérateur
Posté le 05-04-2007 à 23:20:57   answer
 

zell789 a écrit :

On m'a aussi recoomande de faire un GLoadIdentity si tu explique que les Matrices se multiplie a cahque transformation alors en fesant une GLoadIdentity ne reviendrait-on pas au centre de l'origine?


Si, le glLoadIdentity, c'est à faire au tout début, en premier. Avant le gluLookAt ou équivalent. Sinon, tu as raison, ça réinitialise la matrice. (et du coup, si tu en mets une en plein milieu, oui, les objets se retrouvent n'importe où :D )

n°2072
Profil : Internaute
Posté le 05-04-2007 à 23:26:05   answer
 

Ok il va donc falloir y procéder "mathématiquement"
 
Sinon je n'ai encore rien fais sur l'OpenGL car mon projet est tellement dur et j'étais peu formé pour la programmation réseau sous java (je suis plutot imagerie/numérique)
 
J'ai toute les peines du monde a faire un serveur ou se connecte des multiples serveur sans compter les nombreuses exceptions levée ou il faut passer un temps fou pour débugger
 
3eme nuit d'affilée ou je vais me coucher 4h du matin :(

n°2073
Profil : Modérateur
Posté le 05-04-2007 à 23:46:45   answer
 

zell789 a écrit :

Ok il va donc falloir y procéder "mathématiquement"


Pas nécessairement... Imagines-toi un repère avec trois axes. Chaque fois que tu fais une translation, il se déplace selon ses axes. Chaque fois que tu mets une translation, il pivote sur lui-même. Quand tu traces un objet, il se trace selon les axes de ce repère mobile.
 
J'avais songé à faire un tutoriel interactif pour expliquer ça, mais je n'ai jamais trouvé le temps. Pour ceux qui ont fait du Logo, encore une fois, c'est exactement le principe.
 

zell789 a écrit :

J'ai toute les peines du monde a faire un serveur ou se connecte des multiples serveur sans compter les nombreuses exceptions levée ou il faut passer un temps fou pour débugger


En Java, je n'ai jamais fait, mais si tu as des problèmes et que c'est un serveur par sockets, tu peux toujours demander... ça doit suffisamment ressembler au C pour que je puisse me raccrocher aux clients/serveurs que j'ai programmés. ;)
 
Bon courage en tous cas...

n°2076
Profil : Internaute
Posté le 06-04-2007 à 00:13:26   answer
 

Citation :


En Java, je n'ai jamais fait, mais si tu as des problèmes et que c'est un serveur par sockets, tu peux toujours demander... ça doit suffisamment ressembler au C pour que je puisse me raccrocher aux clients/serveurs que j'ai programmés.


 
Je programme un jeu de tape-taupe,c'est le jeu pour enfant ou ils doivent taper des taupes qui sortent de leurs trous,enfin tu vois le principe dans l'ensemble
 
Mon groupe m'ayant donnée la partie la plus cool du projet c'est à dire la partie réseau (qu'on a tres peu vue cette année) je me retrouver donc en terrain inconnus, seul et sans soutient (l'autre groupe de TP qui pourtant  font du réseau m'ont dis qu'il n'ont  jamais fait quelques chose d'aussi compliqué)....
 
J'ai tout de même réussi à faire quelques chose de correcte,mais je ne sais pas comment géréer un jeu multi client
 
En m'inspirant du tuto de Sun, la procédure serait ainsi  : Créer un serveur écouteur qui "écoute" les demandes des clients et créer des sockets où il leur liee en plus un thread(minuteur)or programmant la partie réseau sur le même pc j'ai copié betement le code de sun , ce qui semble marché sauf que les clients affichent la même chose (si le client 1 tape la case 1 , l'affichage de client 2 lui signalera qu'il a tapé la case 1 !!)De plus je ne vois pas du tout comment géré la comparaison finale pour désigner le vainqueur !
 
Autre probleme dire au client que la taupe s'est enfuite : client parle avec le serveur qui quand  lui posssede un petit programme jeuReseau qui quand a lui possede une classe creation d'objet : on peut résumer cela ainsi
 
 
Client--------->Serveur ------>JeuReseau----->Creation objet   ---> : signifiant communique jeuReseau peut donc renvoyer des données au serveur
        <--------
 
Creation gérant la disparition des objets si le joueur ne tape pas,il n'a aucune communication avec le serveur alors comment lui faire parvenir que un objet doit etre supprimé
 
j'ai tenté des méthodes douteurse avec des tonnes de booleens qui me permmettrait de remontrer l'info mais ça marche et puis les profs vont trouver ca fouilli mais je ne connais rien en communication réseau donc je laisse parlé ma logique mais surtout mon inspiration
 
Bon j'essaye de programmer le client/serveurMultiple et à 1 h je fais l'openGL 2 h apres dodo car demain j'ai soutenance (jevais etre défoncé avec le peu d'heure que j'ai dormi  ses derniers jours en plus tapé au clavier me fait affreusement souffrir aux poignets j'avais jamais ressenti cela)
 
Désolé pour toute les fautes,je suis vraiment mais vraiment fatigué,avec le peu d'heure que j'ai dormi!!!:(

Message cité 2 fois
Message édité par zell789 le 06-04-2007 à 00:17:50
n°2077
Profil : Modérateur
Posté le 06-04-2007 à 00:50:26   answer
 

zell789 a écrit :

Créer un serveur écouteur qui "écoute" les demandes des clients et créer des sockets où il leur liee en plus un thread(minuteur)or programmant la partie réseau sur le même pc j'ai copié betement le code de sun , ce qui semble marché sauf que les clients affichent la même chose (si le client 1 tape la case 1 , l'affichage de client 2 lui signalera qu'il a tapé la case 1 !!)De plus je ne vois pas du tout comment géré la comparaison finale pour désigner le vainqueur !


Perso, je procède différemment, d'habitude. Je ne forke pas le programme, mais je garde tout en un seul thread. La raison pour laquelle tu obtiens la même réponse sur tous les clients, c'est peut-être justement parce que tu as un problème de mémoire partagée quand tu splittes les threads (en particulier, les pointeurs après le fork pointent tous vers la MEME adresse, ce qui peut poser problème, mais beaucoup d'autres variables sont partagées).
 
Alors forcément, avec un seul thread, c'est un brin plus tordu à gérer, mais en fait, on peut écouter (du moins en C) TOUS les sockets en même temps, et avoir une action dépendant du socket qui a reçu un message. Ca évite quelques problèmes, mais ça peut en créer d'autres. C'est mieux surtout quand tous les joueurs jouent dans une même partie, pour un client applicatif, c'est différent.
 

zell789 a écrit :

Creation gérant la disparition des objets si le joueur ne tape pas,il n'a aucune communication avec le serveur alors comment lui faire parvenir que un objet doit etre supprimé


A mon sens, ça devrait fonctionner ainsi : le serveur envoie au client les moments où les taupes entrent, sortent, et éventuellement sont assomées (si j'ai bien compris). Le client envoie au serveur les actions du joueur. Ce devrait être le serveur qui gère les conséquences de ces actions (taupe assomée, par exemple, les points, etc).
 
Pour centraliser les points, si tu choisis la méthode multi-thread, fournit à chaque thread un pointeur avant le fork vers une structure (appartenant au programme principal) dans laquelle il pourra mettre les résultats. Pense à mettre un flag dans la structure pour dire 'ça y est, c'est rempli'. Ainsi, le programme principal n'a qu'à surveiller les flags des structures de chaque thread pour savoir quand un thread a fourni son score. A noter que tu peux renvoyer des données dans le thread de la même façon, via la structure. Penses juste à mettre des flags pour savoir quand on peut lire les données, et dans la mesure du possible, utilise un accès en écriture uniquement pour l'un ou pour l'autre pour chaque donnée (l'autre ayant accès uniquement en lecture) et utilise des flags de terminaison, ça évitera les problèmes d'accès concurrent.
 
Bon courage, et bonne nuit :)

n°2078
Profil : Internaute
Posté le 06-04-2007 à 01:45:44   answer
 

C'est bon je suis fini pour demain,je viens d'écraser mon travail par mon travail datant d'une semaine..
 
Je suis dans la ................
 
Comment j'ai pu faire une erreur aussi terrible :pfff:

n°2079
Profil : Internaute
Posté le 06-04-2007 à 09:17:00   answer
 

zell789 a écrit :


Je programme un jeu de tape-taupe,c'est le jeu pour enfant ou ils doivent taper des taupes qui sortent de leurs trous,enfin tu vois le principe dans l'ensemble
 
Mon groupe m'ayant donnée la partie la plus cool du projet c'est à dire la partie réseau (qu'on a tres peu vue cette année) je me retrouver donc en terrain inconnus, seul et sans soutient (l'autre groupe de TP qui pourtant  font du réseau m'ont dis qu'il n'ont  jamais fait quelques chose d'aussi compliqué)....
 
J'ai tout de même réussi à faire quelques chose de correcte,mais je ne sais pas comment géréer un jeu multi client
 
En m'inspirant du tuto de Sun, la procédure serait ainsi  : Créer un serveur écouteur qui "écoute" les demandes des clients et créer des sockets où il leur liee en plus un thread(minuteur)or programmant la partie réseau sur le même pc j'ai copié betement le code de sun , ce qui semble marché sauf que les clients affichent la même chose (si le client 1 tape la case 1 , l'affichage de client 2 lui signalera qu'il a tapé la case 1 !!)De plus je ne vois pas du tout comment géré la comparaison finale pour désigner le vainqueur !


J'ai du mal a comprendre ce que tu cherches a faire, en gros chaque joueur a son propre terrain donc pourquoi tu te contentes pas de gerer tout le jeu cote client et de seulement renvoyer le score au serveur :??:
Tu dois faire un affichage de l'etat courant de l'autre joueur :??:
 

Citation :


Autre probleme dire au client que la taupe s'est enfuite : client parle avec le serveur qui quand  lui posssede un petit programme jeuReseau qui quand a lui possede une classe creation d'objet : on peut résumer cela ainsi
 
Client--------->Serveur ------>JeuReseau----->Creation objet   ---> : signifiant communique jeuReseau peut donc renvoyer des données au serveur
        <--------
 
Creation gérant la disparition des objets si le joueur ne tape pas,il n'a aucune communication avec le serveur alors comment lui faire parvenir que un objet doit etre supprimé


Tu peux essayer de prendre le probleme a l'envers aussi: threader l'affichage du client en le mettant a jour a reception d'un paquet du serveur. Quitte a ce que soit lui qui gere la destruction des taupes, de toute facon tu es oblige d'attendre sa reponse pour savoir si il a tue une taupe.
 

Citation :


Alors forcément, avec un seul thread, c'est un brin plus tordu à gérer, mais en fait, on peut écouter (du moins en C) TOUS les sockets en même temps, et avoir une action dépendant du socket qui a reçu un message. Ca évite quelques problèmes, mais ça peut en créer d'autres. C'est mieux surtout quand tous les joueurs jouent dans une même partie, pour un client applicatif, c'est différent.  


 
Je crois pas avoir vu d'equivalent a select quand j'ai fait du reseau en java. Mais ca passe soit par de la gestion de sockets comme en C soit par de l'echange d'objets. Et quelquepart, j'ai envie de dire que pour un jeu de taupe a moins qu'on vous demande expressement d'optimiser c'est ptet plus simple de balancer l'instance de la classe de la carte du jeu a travers le reseau que de s'amuser a creer un protocole de communication. A moins que ce soit impose?
 
EDIT: apres recherches j'ai dit de la merde, c'est dans la bibliotheque standard depuis le JDK1.4:
http://www.eecs.harvard.edu/~mdw/proj/java-nbio/


Message édité par skyfighter le 06-04-2007 à 10:19:20

---------------
1f u c4n r34d th1s u r34lly n33d t0 g37 l41d.
1f u c4n wr1t3 1t t00.
n°2081
Profil : Modérateur
Posté le 06-04-2007 à 12:10:05   answer
 

zell789 a écrit :

C'est bon je suis fini pour demain,je viens d'écraser mon travail par mon travail datant d'une semaine..


Je ne sais quoi dire si ce n'est :sad:
 
CVS, c'est bien (ou plutôt subversion que CVS, d'ailleurs)... Mais même quand je n'utilise pas de CVS, j'ai un make package pour faire des snapshots réguliers du projet, maintenant que la place disque n'est plus un soucis.
 
 
Skyfighter : je n'ai pas bien compris non plus le principe de ce jeu en réseau, je dois dire.

n°2082
Profil : Internaute
Posté le 06-04-2007 à 12:28:47   answer
 

Koren a écrit :


CVS, c'est bien (ou plutôt subversion que CVS, d'ailleurs)... Mais même quand je n'utilise pas de CVS, j'ai un make package pour faire des snapshots réguliers du projet, maintenant que la place disque n'est plus un soucis.


+1
Surtout qu'avec des sites style opensvn t'as plus forcement besoin d'avoir un serveur chez toi


---------------
1f u c4n r34d th1s u r34lly n33d t0 g37 l41d.
1f u c4n wr1t3 1t t00.
n°2083
Profil : Modérateur
Posté le 06-04-2007 à 13:29:40   answer
 

skyfighter a écrit :

+1
Surtout qu'avec des sites style opensvn t'as plus forcement besoin d'avoir un serveur chez toi


Tu n'aurais pas connaissance d'un bon site contenant des fichiers de traduction XML pour davsvn (Subversion via Apache) par hasard ?  :ange:

n°2084
Profil : Internaute
Posté le 06-04-2007 à 17:21:55   answer
 

Koren a écrit :

Tu n'aurais pas connaissance d'un bon site contenant des fichiers de traduction XML pour davsvn (Subversion via Apache) par hasard ?  :ange:


Je t'avouerais que je me limite a de la ligne de commande pour l'utilisation d'svn, ou alors quand c'est dispo j'utilise un trac (http://trac.edgewall.org/) parce que meme si il donne aux diffs un cote kikoo lol c'est un peu plus lisible que les diffs sous emacs (qui reste quand meme des milliards de fois plus lisibles que ceux d'un certain code co-op).
Donc en fait je comprends pas la question :whistle:
Tu entends quoi par fichier de traduction XML :??:


---------------
1f u c4n r34d th1s u r34lly n33d t0 g37 l41d.
1f u c4n wr1t3 1t t00.
n°2085
Profil : Internaute
Posté le 06-04-2007 à 22:36:13   answer
 

Le projet est fini mais je vais répondre au question :
 

Citation :

J'ai du mal a comprendre ce que tu cherches a faire, en gros chaque joueur a son propre terrain donc pourquoi tu te contentes pas de gerer tout le jeu cote client et de seulement renvoyer le score au serveur :??:
Tu dois faire un affichage de l'etat courant de l'autre joueur :??:


 
Non chaque joue a le même écran et c'est le serveur qui raffraichit l'écran de chauqe joueurs
 

Citation :

Tu peux essayer de prendre le probleme a l'envers aussi: threader l'affichage du client en le mettant a jour a reception d'un paquet du serveur. Quitte a ce que soit lui qui gere la destruction des taupes, de toute facon tu es oblige d'attendre sa reponse pour savoir si il a tue une taupe.


 
J'étais parti de l'idée que le serveur devait tout gérer et le client seulement recevoir pensant que c'était plus facile,mais je suis arrivé à contourner le probleme avec quelques bricolages :)
 
Sinon la soutenance c'est bien passé mais on avait clairement l'impression que mes 2 collegues avaient tout le boulot,j'espere qe je serais pas trop pénaliser (alors que c'est moi qui me suis tapé le plus lourd)
 
L'OPENGL a encore été repoussé...la j'aurai rien à faire et le temps de mettre un vrai programme


Message édité par zell789 le 06-04-2007 à 22:36:51
n°2086
Profil : Modérateur
Posté le 08-04-2007 à 18:14:53   answer
 

Zell789 : Content d'apprendre que la soutenance s'est bien passée, finalement...
 

skyfighter a écrit :

Je t'avouerais que je me limite a de la ligne de commande pour l'utilisation d'svn, ou alors quand c'est dispo j'utilise un trac (http://trac.edgewall.org/) parce que meme si il donne aux diffs un cote kikoo lol c'est un peu plus lisible que les diffs sous emacs (qui reste quand meme des milliards de fois plus lisibles que ceux d'un certain code co-op).
Donc en fait je comprends pas la question :whistle:
Tu entends quoi par fichier de traduction XML :??:


En fait, quand tu installes le module SVN pour Apache, tu peux utiliser subversion via le web, ce qui m'est très utile (par exemple pour aller regarder un fichier d'un de mes projets sans avoir à télécharger des morceaux du projet, simplement en allant ouvrir une page web). Par ailleurs, on peut aller regarder de vieilles versions et autres joyeusetés du même genre. Cela dit, il produit si ma mémoire est bonne du XML, qui doit être mis en forme via un fichier de 'traduction'. Or celui par défaut donne un résultat moche... J'ai trouvé mieux, mais pas suffisamment de fichiers pour me servir d'exemple pour faire quelque chose qui me plaise vraiment.

n°2087
Profil : Internaute
Posté le 08-04-2007 à 23:56:56   answer
 

Koren a écrit :


En fait, quand tu installes le module SVN pour Apache, tu peux utiliser subversion via le web, ce qui m'est très utile (par exemple pour aller regarder un fichier d'un de mes projets sans avoir à télécharger des morceaux du projet, simplement en allant ouvrir une page web). Par ailleurs, on peut aller regarder de vieilles versions et autres joyeusetés du même genre. Cela dit, il produit si ma mémoire est bonne du XML


J'ai pas fait joujou des masses avec l'interface web de svn, mais il me semblait qu'elle pondait html. Remarque vu le serveur SVN en question il devait y avoir du tunning derrière.

Citation :


qui doit être mis en forme via un fichier de 'traduction'.


Du XSL ou un truc propre à SVN :??:

n°2088
Profil : Modérateur
Posté le 09-04-2007 à 00:22:14   answer
 

skyfighter a écrit :

Du XSL ou un truc propre à SVN :??:


Subversion utilise du xslt standard, apparemment, mais je n'ai jamais pris le courage d'apprendre à m'en servir (je n'en ai pas eu l'usage en fait).
 
SInon, oui, ça pond du html, mais indirectement, et on peut contrôler le html produit justement de cette façon...

n°2089
Profil : Internaute
Posté le 11-04-2007 à 17:27:35   answer
 

punaise koren t'es vraiment partout :mdr:

n°2091
Profil : Internaute
Posté le 13-04-2007 à 21:36:42   answer
 

Citation :

Zell789 : Content d'apprendre que la soutenance s'est bien passée, finalement...


 
Personnellement je ne sais pas trop, mes colegues ayant données l'impression que c'étaient eux qui avait fait le plus gros ... enfin
 
Sinon j'ai repris l'OpenGL ce soir,apres des recherches intensives de stage et un peu de repos
 
J'aimerai savoir comment améliorer la profondeur de la caméra car mon mur s'éfface au bout d'une certains distance !? Pourtant les collegues arrivaient a afficher une salle entiere! Mon mur de fond s'éfface au bout d'un certain temps ! J'ai remanié mon programme pour avoir des vrais déplacements 3D (ou de la caméra)
 
EDIT : je me suis basé sur un programme pré-écrit pour les déplacements 3D or mon code ne semble pas adapté les murs se retrouvent à l'envers...

Message cité 1 fois
Message édité par zell789 le 13-04-2007 à 21:43:51
n°2092
Profil : Modérateur
Posté le 13-04-2007 à 23:15:42   answer
 

zell789 a écrit :

J'aimerai savoir comment améliorer la profondeur de la caméra car mon mur s'éfface au bout d'une certains distance !?


Tu peux jouer avec les distances minimales et maximales d'affichage par exemple avec GluPerspective. Ca permet aussi de jouer avec la distance focale de la caméra.
 

zell789 a écrit :

EDIT : je me suis basé sur un programme pré-écrit pour les déplacements 3D or mon code ne semble pas adapté les murs se retrouvent à l'envers...


Que veux-tu dire par murs à l'envers ?

n°2093
Profil : Internaute
Posté le 13-04-2007 à 23:24:47   answer
 

Citation :

Tu peux jouer avec les distances minimales et maximales d'affichage par exemple avec GluPerspective. Ca permet aussi de jouer avec la distance focale de la caméra.


 
Exact c'est ce que je cherchais a faire,c'est à dire modifier jusq'a ou peux filmer la caméra sinon il m'aurait été impossible de filmer une grande salle.
 

Citation :

Que veux-tu dire par murs à l'envers ?


 
Normalement les cotes des murs sont orientés vers nous or dans ce cas là il se retrouve orienté vers "l'écran"...c'est bizzare. A noter que je n'utilise pas le GlLookAt mais des translations et des rotations pour simuler la caméra...


Message édité par zell789 le 14-04-2007 à 11:28:23
n°2094
Profil : Internaute
Posté le 14-04-2007 à 18:16:35   answer
 

Mon programme qui permettait de faire des déplacements en 3D est bien intégré j'aimerai maintenant créer une sphere fonctionnant comme une une sphere lumineuse (une sorte d'ampoule)Je me permet de rebondir sur ce qu'a ma dit Koren
 

Citation :

Il n'y a pas de façon simple de faire un soleil "visible". La seule façon de le bidouiller, c'est de dessiner une sphèe à l'endroit de la lumière en désactivant la lumière elle-même au moment du tracé (sinon on risque d'avoir des soucis vu que la source est dedans) ou en la redéclarant en ambiante.


 
Mais comment placer la lumiere dans la sphere car je ne connais pas exactement les coordonées de la lumière
 
L'appel des variables
 

Code :
  1. int PositionLumiere[4] = {0,70,-70,0};l
  2.     float LightDif[3] = {1,1,0};
  3.     int MatSpec [4] = {1,1,1,1};


 
Le moment ou j'appel la lumiere/...
 

Code :
  1. glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
  2. c+=1;
  3. glRotated(c,1,0,0);
  4. glLightfv(GL_LIGHT0,GL_DIFFUSE,LightDif);
  5. glLightiv(GL_LIGHT0,GL_POSITION,PositionLumiere);
  6. glRotated(-c,1,0,0);
  7. glLoadIdentity();
  8. float rotationy = 360.0f - yrot;
  9. glRotatef(rotationx,1.0f,0,0);
  10. glRotatef(rotationy,0,1.0f,0);
  11. glTranslatef(-xpos, -0.25f, -zpos);


 
Or la lumiere n 'est pas un objet sur scene mais plutot en dehors..

n°2096
Profil : Modérateur
Posté le 15-04-2007 à 10:39:44   answer
 

Avec ce que tu as comme coordonnées pour la source lumineuse (0, 70, -70, 0), elle se trouve à l'infini. Donc tu ne pourras jamais placer un objet parfaitement au bon endroit.
 
Tu dois pouvoir essayer de placer une sphère à coup de translation dans la direction (0, 70, -70) à une distance assez grande pour être loin de la scène mais quand même dans la zone de tracé.
 
Par contre, pour la positionner correctement, il faut faire attention au fait qu'il y a DEUX piles de matrices dans OpenGL. Si ma mémoire est bonne (je me fais sans arrêt avoir avec ce genre de choses, j'ai des bouts de codes pour ne pas me tromper :) ), la lumière n'est affectée que par l'une des deux contrairement à la scène qui est affectée par les deux. Du coup, ça peut être un peu délicat à gérer...

n°2097
Profil : Internaute
Posté le 15-04-2007 à 11:19:02   answer
 

EDIT: je met mes questions au fur à mesure que je progresse...
 

Citation :

 Avec ce que tu as comme coordonnées pour la source lumineuse (0, 70, -70, 0), elle se trouve à l'infini. Donc tu ne pourras jamais placer un objet parfaitement au bon endroit.
 
Tu dois pouvoir essayer de placer une sphère à coup de translation dans la direction (0, 70, -70) à une distance assez grande pour être loin de la scène mais quand même dans la zone de tracé.
 
Par contre, pour la positionner correctement, il faut faire attention au fait qu'il y a DEUX piles de matrices dans OpenGL. Si ma mémoire est bonne (je me fais sans arrêt avoir avec ce genre de choses, j'ai des bouts de codes pour ne pas me tromper :) ), la lumière n'est affectée que par l'une des deux contrairement à la scène qui est affectée par les deux. Du coup, ça peut être un peu délicat à gérer...


 
1)Cela veut donc dire qu'avec une lumiere ponctuelle il m'est impossible de la placer sur la scene car elle est ponctuelle?Une lumiere directionelle peut-elle etre placer sur scene?J'ai vu un groupe qui avait réussi à emprisonner (ou du moins simuler)une lumiere dans une sphere (ce que je tente de faire égaelment!!!)
 
2) en plaçant la lumière à une distance visible sur mon plan,il serait donc possible de controler la lumiere?Car sinon je vais tenter de placer la lumiere dans la scène !
 
3)Sinon si je met la sphere à la même position que la lumiere étant positionné à l'infini comme peut-elle etre visible?
 
4)Je peux manipuler la lumiere ponctuelle via les touches du clavier grace à la rotation or il se déroule un phenomene bizarre quand l'avant de mes billes sont éclariés mais pas le mur ! alors que quand le mur est éclairé,les billes non..Je sais pas si c'est clair je vais tenter de décrire mon dessin
 
 
Mon programme se compose de 3 murs : un mur de fond,2 murs sur la gauche et la droite, un sol..
 
Sur ce sol est posé des billes et une caisse. Quand le programme on se retrouve de face au décor.
 
 
5)J'ai utilisé une lumière directionnele pour simuler la lampe et bizzarement ca marche assez,j'ai une créer une sphere et quand je la déplace  elle éclaire mais trop faiblement les surfaces est ce du à la position de ma lumiere??
 
Je met la procédure ou je créer mes objets au cas ou si tu désires voir
 

Code :
  1. int RePaint()
  2. {
  3. glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
  4. gluQuadricTexture(Sphere1, true);
  5. gluQuadricDrawStyle(Sphere1, GLU_FILL);
  6. glTranslatef(-x, -y,-z);
  7. glRotatef(c,1,0,0);
  8. glRotatef(b,0,1,0);
  9. gluSphere(Sphere1,1200, 500, 50);
  10. glLightfv(GL_LIGHT0,GL_DIFFUSE,LightDif);
  11. glLightiv(GL_LIGHT0,GL_POSITION,PositionLumiere);
  12. glRotatef(-c,1,0,0);
  13. glRotatef(-b,0,1,0);
  14. glTranslatef(x, y,z);
  15. glLoadIdentity();
  16. float rotationy = 360.0f - yrot;
  17. glRotatef(rotationx,1.0f,0,0);
  18. glRotatef(rotationy,0,1.0f,0);
  19. glTranslatef(-xpos, -0.25f, -zpos);
  20. glBindTexture(GL_TEXTURE_2D, texture[filter]);
  21.    //Creation du mur du fond
  22.          glBindTexture(GL_TEXTURE_2D,murdefond);
  23.      
  24.      glBegin(GL_QUADS);
  25.                            glTexCoord2i(1,0);
  26.                            glVertex3d(-20000,-8000,-30000);
  27.                            glTexCoord2i(1,1);
  28.                            glVertex3d(-20000,8000,-30000);
  29.                            glTexCoord2i(0,1);
  30.                            glVertex3d(20000,8000,-30000);
  31.                            glTexCoord2i(0,0);
  32.                            glVertex3d(20000,-8000,-30000); //1ere face
  33.          glEnd();
  34.        
  35.          //glBindTexture(GL_TEXTURE_2D,mur);
  36.                
  37.          glBegin(GL_QUADS);                 
  38.                            //2eme face
  39.                            glTexCoord2i(1,0);
  40.                            glVertex3d(18000,8000,-31000);
  41.                            glTexCoord2i(1,1);
  42.                            glVertex3d(18000,8000,-12000);
  43.                            glTexCoord2i(0,1);
  44.                            glVertex3d(18000,-8400,-12000);
  45.                            glTexCoord2i(0,0);
  46.                            glVertex3d(18000,-8400,-31000);
  47.          glEnd();
  48.        
  49.        
  50.          glBegin(GL_QUADS);
  51.                            //3eme face
  52.                            glTexCoord2i(1,0);
  53.                            glVertex3d(-20000,8000,-31000);
  54.                            glTexCoord2i(1,1);
  55.                            glVertex3d(-20000,8000,-12000);
  56.                            glTexCoord2i(0,1);
  57.                            glVertex3d(-20000,-8400,-12000);
  58.                            glTexCoord2i(0,0);
  59.                            glVertex3d(-20000,-8400,-31000);
  60.          glEnd();
  61.        
  62.          glBindTexture(GL_TEXTURE_2D,sol);
  63.        
  64.          glBegin(GL_QUADS);
  65.                            glTexCoord2i(1,0);
  66.                            glVertex3d(-20000,-8000,-31000);
  67.                            glTexCoord2i(1,1);
  68.                            glVertex3d(-20000,-8000,-12000);
  69.                            glTexCoord2i(0,1);
  70.                            glVertex3d(18000,-8000,-12000);
  71.                            glTexCoord2i(0,0);
  72.                            glVertex3d(18000,-8000,-31000);
  73.                          
  74.      glEnd();
  75.    
  76.      glBindTexture(GL_TEXTURE_2D,mur);
  77.    
  78.      glBegin(GL_QUADS);
  79.                         glTexCoord2i(1,0);
  80.                            glVertex3d(-10000,-5000,-29500);
  81.                            glTexCoord2i(1,1);
  82.                            glVertex3d(-10000,5000,-29500);
  83.                            glTexCoord2i(0,1);
  84.                            glVertex3d(10000,5000,-29500);
  85.                            glTexCoord2i(0,0);
  86.                            glVertex3d(10000,-5000,-29500);
  87.                        
  88.         glEnd();
  89.        
  90.         glBindTexture(GL_TEXTURE_2D,caisse);
  91.              
  92.        //1ere face
  93.          glBegin(GL_QUADS);
  94.                              glTexCoord2i(1,0);
  95.                            glVertex3d(12000,-3000,-20000);
  96.                             glTexCoord2i(1,1);
  97.                            glVertex3d(12000,-8000,-20000);
  98.                             glTexCoord2i(0,1);
  99.                            glVertex3d(7000,-8000,-20000);
  100.                             glTexCoord2i(0,0);
  101.                            glVertex3d(7000,-3000,-20000);
  102.          glEnd();
  103.          //2eme face
  104.        
  105.          glBegin(GL_QUADS);
  106.                             glTexCoord2i(1,0);
  107.                            glVertex3d(7000,-3000,-20000);
  108.                            glTexCoord2i(1,1);
  109.                            glVertex3d(7000,-3000,-15000);
  110.                            glTexCoord2i(0,1);
  111.                            glVertex3d(7000,-8000,-15000);
  112.                            glTexCoord2i(0,0);
  113.                            glVertex3d(7000,-8000,-20000);
  114.          glEnd();
  115.          //3eme face
  116.        
  117.          glBegin(GL_QUADS);
  118.                              glTexCoord2i(1,0);
  119.                            glVertex3d(12000,-3000,-20000);
  120.                            glTexCoord2i(1,1);
  121.                            glVertex3d(12000,-3000,-15000);
  122.                            glTexCoord2i(0,1);
  123.                            glVertex3d(12000,-8000,-15000);
  124.                            glTexCoord2i(0,0);
  125.                            glVertex3d(12000,-8000,-20000);
  126.          glEnd();
  127.        
  128.          //4eme face  
  129.        
  130.          glBegin(GL_QUADS);
  131.                            glTexCoord2i(1,0);
  132.                            glVertex3d(7000,-3000,-15000);
  133.                            glTexCoord2i(1,1);
  134.                            glVertex3d(7000,-8000,-15000);
  135.                            glTexCoord2i(0,1);
  136.                            glVertex3d(12000,-8000,-15000);
  137.                            glTexCoord2i(0,0);
  138.                            glVertex3d(12000,-3000,-15000);
  139.         glEnd();
  140.        
  141.         //5eme face
  142.        
  143.         glBegin(GL_QUADS);
  144.                           glTexCoord2i(1,0);
  145.                            glVertex3d(7000,-3000,-20000);
  146.                            glTexCoord2i(1,1);
  147.                            glVertex3d(7000,-3000,-15000);
  148.                            glTexCoord2i(0,1);
  149.                            glVertex3d(12000,-3000,-15000);
  150.                            glTexCoord2i(0,0);
  151.                            glVertex3d(12000,-3000,-20000);
  152.         glEnd();
  153.        
  154.    
  155.      glBindTexture(GL_TEXTURE_2D, texture[filter]);
  156.    
  157.      glTranslated(-3000,-7200,-14000);
  158.    
  159.      gluQuadricTexture(Sphere2, true);
  160.      gluQuadricDrawStyle(Sphere2, GLU_FILL);
  161.      gluQuadricTexture(Sphere3,true);
  162.      gluQuadricDrawStyle(Sphere3,GLU_FILL);
  163.      gluQuadricTexture(Cylindre1, true);
  164.      gluQuadricDrawStyle(Cylindre1, GLU_FILL);
  165.    
  166.      gluSphere(Sphere2,900, 500, 50);
  167.         glTranslated(5000,1000,0);
  168.        
  169.          //Simule un mouveent de "va et vient" d'une sphere
  170.      /*if (a <= -2000) mvtTran = 0;  
  171.         if (a >= 2000) mvtTran = 1;  
  172.         if (!mvtTran) a += 10;  
  173.         if (mvtTran) a -= 10;  
  174.         glTranslated (a,0,0);*/
  175.        
  176.         gluSphere(Sphere3,900, 500, 50);
  177.  
  178.        
  179. return TRUE;
  180. }


 
Merci Koren

Message cité 1 fois
Message édité par zell789 le 15-04-2007 à 15:56:50
 Page :  1  2  3

Aller à :
     Ajouter une réponse