Utilisateur anonyme
-
25 janv. 2007 à 18:48
yann_lo_san
Messages postés1137Date d'inscriptionlundi 17 novembre 2003StatutMembreDernière intervention23 janvier 2016
-
25 janv. 2007 à 21:32
Bonjour à tous. Je suis un debutant en c++ et en programmation 3d, mais j'avance très vite grâce à d'excellents sites que j'ai trouvé. Sinon je programmais déjà en java donc je ne suis pas un neophyte complet en programmation . Voici pour l'intro.
Voulant progresser dans les domaines c++ et programmation 3d j'ai décidé de faire moi même un moteur 3d, qui resterait très modeste, rassurez vous je ne compte pas refaire ogre en mieux lol.
Eh oui, je pense que réinventer la roue est très utile pour progresser en c++ et pour ensuite mieux se servir d'un véritable moteur 3d performant, ou pour coder des jeux 3d très basiques simplement grâce à un moteur que je connaîterais par coeur puisque c'est moi qui l'aurait codé .
Mon moteur serait codé en 3d avec opengl puisque j''ai trouvé d'excellents tutoriaux dessus, de plus il serait en accord parfait avec la sdl pour l'implementation de opengl, en effet les deux sont portables.
Venons aux problèmes : j'ai cherché de la documentation sur comment bien structurer un moteur 3d et je n'ai trouvé que peu d'informations qui m'ont conduit à la structure et l'organisation suivante de mon moteur. En effet je ne veux pas commencer à coder sans savoir clairement où je vais, sinon je risquerais de me planter à un moment et de devoir tout refaire parce que je n'avais pas prévu un truc.
Structure du moteur en très résumé : (la vrai structure du moteur est plus complète que ça sur papier rassurez vous (texture, lumiere,...)
une classe principal nommé Rendu serait le gestionnaire de base du moteur. Ce serait le noeud principal qui comprendrait donc des coordonnées et une orientation précise dans l'espace. Cette classe dériverait d'autres classes comme celle de la gestion de la caméra ou la classe Affichage. En clair, je cree un noeud (une instance de la classe Rendu), je le place, je creer un cube par ex à cet endroit avec une camera, et des que je bouge les coordonnes de ma classe rendu, je redessine tous les objets liees à ma classe (mon noeud), la camera et le cube bougent donc en meme temps.
Le problème se situe au niveau de ma classe que j'ai nommé Affichage. En clair elle récupéreait des vertex qui formeraient des polygones pour faire des objets 3d. Mais comment les envoyer à ma classe Rendu (mon noeud) pour qu'elle affiche ces solides. Sous forme de tableau à 3 dimensions (x y z) ou bien sous forme de structure struct Vertex et struct Polygon.
De plus une fonction renvoyant une structure n'existe pas, ou bien comment faire ?
Enfin si je fais un AfficheCube(largeur,longueur,profondeur,...) pour afficher un cube par exemple, et que j'arrive à renvoyer les coordonnées à Rendu, qui les stockeraient dans une structure ou un tableau pour els afficher, si je fais une deuxieme fois un AfficheCube(largeur,...), il va supprimmer le premier et le remplacer par le deuxieme; puisque je n'aurais qu'une seule structure ou tableau à 3 dimensions dans rendu où seront enregistrées les coordonnées.
Où alors peut etre que ma structure du moteur est totalement erroné, dans ce cas si vous pouviez m'aiguiller vers une bonne structure pour un moteur 3d, car la doc la dessus est tres dur a trouver même en anglais.
Merci d'avoir pris le temps de tout lire, je sais sûrement que je n'ai pas dû être clair sur certains points mais mon problème est dur à expliquer.
Merci d'avance à ceux qui prendront le temps de me répondre
Effectivement je connais ce lien, mais malheureusement je pense qu'il est encore d'un niveau trop élevé pour moi. J'ai regardé pour m'inspirer de certaines classes et un peu de la structure mais il m'aidera beaucoup plus un peu plus tard, quand j'aurais plus d'experience avec la programmation 3d.
yann_lo_san
Messages postés1137Date d'inscriptionlundi 17 novembre 2003StatutMembreDernière intervention23 janvier 201626 25 janv. 2007 à 20:11
Salut,
Tu dis :
"De plus une fonction renvoyant une structure n'existe pas, ou bien comment faire ?"
On peut bien sur renvoyer une struct par valeur ou par ref (pointeur).
En général tu aura une classe Objet3d contenant les vertices, les positions, les distances, les vitesses ect...
Et une fonction de rendu qui bouclera sur tous les objets Objet3d et les affichera après les avoir trié.
Donc tu aura un tableau d'objet3d[] dans ta classe Affichage.
Cette idée est bonne comme je disais, mais le problème reste de renvoyer à la classe Rendu les positions les distances les coordonnées,...
avec un tableau [] d'objet3d comme tu dis, mais on ne connait pas sa taille puisque l'utilisateur pourra rajouter autant d'objet qu'il le souhaite, alors comment l'initialiser ? En lui donnant une valeur limite comme 50 objets maximum ou existe-t-il des tableaux dynamiques en c++
Enfin ces tableaux d'objets 3d pointeront sur des structure de vertex ou sur des tableaux 3d contenant les coordonnees x, y et z des vertex ? Je pense que les structures sont plus pratiques à utiliser mais j'attends vos avis
++ et bonne prog
PS : si tu pouvais me donner un exemple de code renvoyant un nouveau pointeur sur une structure dès que la fonction est appelé
par ex: dès que affichecube est appelé, il crée une nouvelle instance d'une structure struct vertex et y stocke les vertex, ...
Parce que le problème est que des que affichecube sera appelé deux fois, il creera le meme pointeur vers la structure, et donc on ne resout pas le probleme puisqu'on supprimme l'ancien pointeur pour mettre les coordonnes du nouveau solide dans le nouveau pointeur de la structure
Ou alors j'ai vraiment rien compris au principe (mais c'est pas grave je suis la pour apprendre lol
Vous n’avez pas trouvé la réponse que vous recherchez ?
yann_lo_san
Messages postés1137Date d'inscriptionlundi 17 novembre 2003StatutMembreDernière intervention23 janvier 201626 25 janv. 2007 à 21:07
Non, elle est créée qu'une seule fois !
Ses attributs interne changent, mais pas l'instance de cette struct.
C'est le principe d'un objet à état changeant.
Mais si je cree un cube que j'affiche, puis je modifie les attributs internes de mon instance de la structure, j'affiche une sphere maintenant , et maintenant j'aimerais afficher le premier cube en changeant juste la position, je dois tout reecrire puis que j'ai modifié ses attributs avec le deuxieme objet que j'ai affiche