MOTEUR 3D AVEC OPENGL

rambc Messages postés 224 Date d'inscription mercredi 21 avril 2004 Statut Membre Dernière intervention 29 mars 2009 - 17 déc. 2006 à 10:50
crazy lapinou Messages postés 22 Date d'inscription dimanche 26 novembre 2006 Statut Membre Dernière intervention 18 août 2008 - 20 févr. 2008 à 17:38
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/40748-moteur-3d-avec-opengl

crazy lapinou Messages postés 22 Date d'inscription dimanche 26 novembre 2006 Statut Membre Dernière intervention 18 août 2008
20 févr. 2008 à 17:38
bon... comme vous l'avez sûrement deviné, j'ai mis en pause se moteur ^^
En effet, mon PC a reformater plein de fois, je suis passé sous windows, j'ai d'autres projets en prog... bref, pas le temps de continuer.
Je pense peut être le continuer plus tard en ajoutant une gestion du son, un moteur réseau, orienté objet, etc... parce que j'aimerais bien programmer un MMORPG (mais je me lance sur un 2D d'abord)
Donc, restez dans le coin, peut être qu'une nouvelle version sortira ;)
Funto66 Messages postés 1267 Date d'inscription mercredi 1 janvier 2003 Statut Membre Dernière intervention 28 février 2007 4
4 janv. 2007 à 22:14
Ca ne m'étonne même pas :p
Arnaud16022 Messages postés 1329 Date d'inscription vendredi 15 août 2003 Statut Membre Dernière intervention 16 juin 2010 2
4 janv. 2007 à 12:56
+1 pou glfw, ils la conseillent même à Epita ^^

"(je pense notamment à ton jpeglib.h, sauvagement recopié dans ImageLoaders.h par exemple, ce qui ne sert à rien en plus vu qu'on a besoin de la libjpeg pour compiler il me semble, non?)." -> j'aime bien le sauvagement lol ... même moi je me le suis dis quand je l'ai fait xD ( oui tu as bien lu, c'est de moi cette horreur )
crazy lapinou Messages postés 22 Date d'inscription dimanche 26 novembre 2006 Statut Membre Dernière intervention 18 août 2008
2 janv. 2007 à 11:18
Je ne connaissais pas cette lib. Je vais faire un tour sur le net et si elle me plait, je l'utiliserais surement.

Merci encore pour ton aide (et pour celle des autres)...
Funto66 Messages postés 1267 Date d'inscription mercredi 1 janvier 2003 Statut Membre Dernière intervention 28 février 2007 4
1 janv. 2007 à 20:07
Ok, cool que ce soit celle-là, elle est portable ^^

Quand tu parles de te passer de GLUT, tu veux dire pour la gestion de fenêtres, l'input clavier/souris...etc ? Perso j'utiliser GLFW pour ça, et je ne trouve pas forcément utile de refaire ce qu'elle contient...
Surtout que gérer ça sur plein de plate-formes différentes n'est pas une mince affaire; sur Windows la doc est assez facilement trouvable, sous Linux faut apprendre à bidouiller avec la Xlib (pas très facile...), sous Mac c'est avec Cocoa en Objective-C, et encore faut-il avoir un Mac...
Alors qu'utiliser GLFW ou GLUT (préférence pr GLFW qd même, qui est libre, n'est pas abandonné, est moins buggué et donne plus de libertés à l'utilisateur (on voit la mainloop)) est facile et efficace...
crazy lapinou Messages postés 22 Date d'inscription dimanche 26 novembre 2006 Statut Membre Dernière intervention 18 août 2008
1 janv. 2007 à 19:06
Je pense que dans ta liste, la méthode que j'utilise et la 3eme et pas la 1ere.
Je charge une image et j'affiche le caractèrequi est dans cette image.

GLUT est une bonne lib, mais j'aimerais plutôt créer mes librairies (c'est pas gagné). Pour la portabilité, j'essayerais de créer des classes qui puissent marcher sur différents systems (Linux, MacOS, Windows ...)

Pour le probleme des textures qui ne sont pas toutes créer pareil (les lettres ne commences pas à la même positions, les lettres sont plus ou moins grosses ...) je pense créer un script qui définira la grosseur des lettres, la position de départ...

Si tu as quelques idéées ou quelques astuces, tu pourrais peut être me les poster dans ma boite au lettre.

a+
Funto66 Messages postés 1267 Date d'inscription mercredi 1 janvier 2003 Statut Membre Dernière intervention 28 février 2007 4
1 janv. 2007 à 18:35
Pour tout ce qui est relatif à l'affichage de texte, il existe 3 méthodes :
-utiliser l'API Win32 (ce que tu fais il me semble) pour utiliser les fonts en TTF
-utiliser la librairie FreeType2 (Cf NeHe pour un tuto sur le sujet)
-utiliser une texture contenant tous les caractères à afficher, et les plaquer sur des quads

Ou sinon utiliser GLUT, qui utilise les bitmaps OpenGL (glRasterPos et tout ça...).

Le truc avec la tienne c'est qu'elle n'est pas portable, perso en général j'utilise une texture (j'ai posté une source sur le sujet il me semble ici)...
Après ça dépend, si tu veux que ton moteur 3D soit portable ou pas...

PS : une autre possibilité aussi c'est de réimplémenter sous les autres OS le système avec l'API Win32 (genre en utilisant la Xlib sous Linux...).
crazy lapinou Messages postés 22 Date d'inscription dimanche 26 novembre 2006 Statut Membre Dernière intervention 18 août 2008
1 janv. 2007 à 18:21
Merci de tous vos conseils. J'essayerai de les utiliser dans ce "moteur 3D" et dans d'autres programmes.
Pour information, je suis en train de retravailler mon code pour y implanter de nombreuses fonctionnalités et pour réécrire les algorithmes que j'ai copier à partir du net. Si quelqu'un pouvait m'aider à en écrire, ça serait sympa...

C'est vrai que j'ai copier du code, mais il a quand même fallu le modifier pour qu'il marche. Par exemple, pour la fonction BuildFont(), j'ai du modifier un certain nombre de variables et de valeurs pour que les images s'affichent correctement. Pareil pour bien d'autres fonctions...

J'essayerais de modifier le nombre de polices maximum (il n'y en a que 2 ici) pour pouvoir en utiliser à l'infini...

Merci pour tous vos conseils...
maxoss Messages postés 3 Date d'inscription dimanche 6 juin 2004 Statut Membre Dernière intervention 31 décembre 2006
31 déc. 2006 à 06:08
Exemple... ça s'écrit comme ça... sans "a"... Merci, ça faisait mal.
Example, ç'est en anglais...
Funto66 Messages postés 1267 Date d'inscription mercredi 1 janvier 2003 Statut Membre Dernière intervention 28 février 2007 4
31 déc. 2006 à 01:06
Hmm, en fait ton code c'est surtout du récupérage de code fait par plein d'autres gens et un gros mix de tout ça...pas forcément "homogène"...

Oui je sais c'est pas très gentil, dsl, je sais que c'est un début et que quand on voit son modèle 3D s'afficher, sous l'euphorie du "waaah j'ai créé un moteur 3D !!"...

Disons que l'idée du "trouver un code sur le net qui fait", ok, mais pas pour le recopier DANS ton code direct; le principal c'est de comprendre l'algo derrière, de le faire à sa façon, et encore si on peut éviter de piquer un algo déjà fait et se le refaire soi-même, je trouve ça vachement plus intéressant et instructif que de repiquer du code, surtout s'il n'est pas super bien écrit...(je pense notamment à ton jpeglib.h, sauvagement recopié dans ImageLoaders.h par exemple, ce qui ne sert à rien en plus vu qu'on a besoin de la libjpeg pour compiler il me semble, non?).

Intéresse-toi aussi à d'autres moteurs 3D déjà écrits, comme OGRE (je l'utilise ces tempcs-ci, je recommande : très bien écrit et organisé), IrrLicht ou CrystalSpace, qui sont les 3 grosses références, ne serait-ce que pour voir comment organiser ton code (une classe représentant un objet 3D, une représentant une texture...etc).
-> important : l'Orienté Objet !!

Pour ce qui est des formats 3D, comme le dit Arnaud d'expérience (;)), c'est pas gagné : perso s'il y en a un que je sens bien, c'est le .mesh, créé par OGRE. Il existe des exportateurs pour plein de modeleurs 3D, du code le chargeant, tu peux en trouver en fouillant dans OGRE (IrrLicht aussi supporte ce format), et surtout il supporte les textures et l'animation par bones :)

Autre possibilité : te créer ton propre format et l'exportateur qui va avec pour le modeleur de ton choix (genre écrit en Python pour exporter depuis Blender) (Cf une de mes sources, avec un exportateur pour gmax, qui n'est maintenant malheureusement plus en téléchargement libre je crois...).

C'est long et difficile, mais c'est tellement bon :p
Arnaud16022 Messages postés 1329 Date d'inscription vendredi 15 août 2003 Statut Membre Dernière intervention 16 juin 2010 2
23 déc. 2006 à 15:48
Je trouve étrange pour un projet openGL que tu veuilles ouvrir du .x :)
Disons que les formats 3D c'est pas gagné ... encore et toujours dans Sniper ( j'en parle car tu le connais ! ) il a un loader md2, sinon tu peux aller voir sur google celui de David Henry.
Pour les images, tu l'as déjà ce code :s je dis juste que c'est mal organisé: oriente objet, encapsule, hérite, polymorphise, singletonne, et tout ira mieux ( pour ma dernière phrase, google est ton ami, ou pose des questions plus précises dans le forum :) )

Bye, bonne continuation.
crazy lapinou Messages postés 22 Date d'inscription dimanche 26 novembre 2006 Statut Membre Dernière intervention 18 août 2008
22 déc. 2006 à 20:35
J'essaierais de modifier mon code pour qu'il ressemble à un vrai moteur 3d, mais c'est pas gagné...

Si quelqu'un pouvait m'aider à trouver du code permettant de charger des fichiers 3d (.x, .md2, etc...) et des images (.png, etc...)ou à modifier mon code (c'est pas dur...) il pourrai me l'envoyer juste juste pour que j'apprenne de nouveaux truc.
Arnaud16022 Messages postés 1329 Date d'inscription vendredi 15 août 2003 Statut Membre Dernière intervention 16 juin 2010 2
22 déc. 2006 à 12:56
C'est bien ce que je dis les gens : j'avais programmé ça comme un porc. Maintenant j'évite même le générique dans le .h, je ré-inclus un .hpp histoire que déclaration et implémentation soient bien séparés ( même si on est bien d'accord que ça ne change strictement rien pour le compilo )
D'où ma critique à l'auteur de cette source : fais gaffe à ce que tu copies-colles du net, c'est pas parce que j'avais eu 10/10 à cette source que c'est forcément bien codé ;)
shenron666 Messages postés 229 Date d'inscription dimanche 14 septembre 2003 Statut Membre Dernière intervention 20 août 2014
21 déc. 2006 à 22:36
le code dans le .h c'est pour faire du inline
faut pas non plus y coller des dizaines de lignes
luhtor Messages postés 2023 Date d'inscription mardi 24 septembre 2002 Statut Membre Dernière intervention 28 juillet 2008 6
21 déc. 2006 à 20:13
Jamais de code dans un .h sauf pour du généric.
Arnaud16022 Messages postés 1329 Date d'inscription vendredi 15 août 2003 Statut Membre Dernière intervention 16 juin 2010 2
21 déc. 2006 à 19:09
Hum
Disons que le terme de moteur 3D est absolument inapproprié.
Il s'agit davantage d'un set d'helpers pour oGL.

Le problème n'est pas du tout, m'est avis, que tu aurais dû attendre plus, mais plutôt que tu aurais dû mieux organiser ton code :
exemple dans glengine.h, GLSwapBuffers n'a rien à faire dans le même fichier que DrawModelOBJ...

Au fait, je trouve qu'il y a beaucoup de fonctions qui ressemblent étrangement à celles de Sniper, je pense surtout pour l'affichage de texte avec int center, je me trompe ou ça vient de moi ? ( absolument pas une critique hein, ça fait plaisir ^^ )

EDIT :
roh je rêve t'as fait un copier-coller ... très mauvaise idée, le code de Sniper fait partie des plus horribles que j'aie jamais tapé...
genre tu ne t'es pas demandé ce que faisait UINT MD2textures[50];
dans le gestionnaire de textures, si on peut appeller ça comme ça ?
et puis on ne met jamais de code dans un .h, juste des déclarations.
Je sais ces erreurs c'est moi qui les aies faites, mais c'est pas une raison pour ne pas les corriger.
Si tu veux un wrapper pour charger des images, utilise DeviL ( mais un pote m'a dit qu'il avait eu des problèmes avec), ou tgaloader de Funto, ou MP moi, je t'enverrai un _vrai_ code avec tout ce qu'il faut ( ou plutôt non, je le posterai certainement pendant les vacances, encore quelques trucs à finaliser )

++
XT95 Messages postés 25 Date d'inscription mercredi 19 octobre 2005 Statut Membre Dernière intervention 5 août 2007
20 déc. 2006 à 18:14
Bah disons que ca aurait été mieux si tu l'avais poster dans un ptit moment avec quelques trucs de plus mais c'est un bon début quand meme ;) !
Continu!!
crazy lapinou Messages postés 22 Date d'inscription dimanche 26 novembre 2006 Statut Membre Dernière intervention 18 août 2008
20 déc. 2006 à 17:11
Vous êtes un peu dur avec moi!
Bon d'accord! On peut pas appeller ça un moteur!
Mais je suis jeune et je n'avais que ça à faire!
Peut être qu'un jour ça sera un vrai moteur...
katsankat Messages postés 571 Date d'inscription vendredi 30 décembre 2005 Statut Membre Dernière intervention 12 juillet 2012 3
18 déc. 2006 à 21:30
Les gens sont durs.
shenron666 Messages postés 229 Date d'inscription dimanche 14 septembre 2003 Statut Membre Dernière intervention 20 août 2014
18 déc. 2006 à 19:31
effectivement, un peu léger pour un "moteur", un terme malheureusement abusivement utilisé
en dehors de ça c'est pas mal, continues comme ça et ajoutes lui des fonctionnalités (physique, son, script, IA, ...) histoire d'en faire un vrai moteur ;-)
courage, c'est un bon début
XT95 Messages postés 25 Date d'inscription mercredi 19 octobre 2005 Statut Membre Dernière intervention 5 août 2007
18 déc. 2006 à 18:35
Je sais pas si on peut encore appeler sa un moteur 3D :-°
crazy lapinou Messages postés 22 Date d'inscription dimanche 26 novembre 2006 Statut Membre Dernière intervention 18 août 2008
17 déc. 2006 à 12:59
Il ne gère que l'affichage pour le moment.
Peut être qu'un jour il pourra jouer des sons ou des musiques.
shenron666 Messages postés 229 Date d'inscription dimanche 14 septembre 2003 Statut Membre Dernière intervention 20 août 2014
17 déc. 2006 à 12:15
il gère le son ton... moteur 3D ou seulement l'affichage ?
crazy lapinou Messages postés 22 Date d'inscription dimanche 26 novembre 2006 Statut Membre Dernière intervention 18 août 2008
17 déc. 2006 à 11:48
Je vais mettre une image mais ça sera l'example qui est fourni avec.
rambc Messages postés 224 Date d'inscription mercredi 21 avril 2004 Statut Membre Dernière intervention 29 mars 2009
17 déc. 2006 à 10:50
Une petite image serait TRES bien venue pour montrer ce qu'il est possible de faire avec ton moteur.
Rejoignez-nous