Accueil > Forum > > > > Structure d'un moteur
Structure d'un moteur
jeudi 25 janvier 2007 à 18:48:39 |
Structure d'un moteur

Skyffer3
|
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 
++ et bonne prog
|
|
jeudi 25 janvier 2007 à 19:06:14 |
Re : Structure d'un moteur

laurent1024
|
je sais pas si tu as deja vu ce lien http://loulou.developpez.com/tutoriels/moteur3d/ mais ca peut t'aider je pense. bon courage pour la programmation de ton moteur. ++
|
|
jeudi 25 janvier 2007 à 19:19:07 |
Re : Structure d'un moteur

Skyffer3
|
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. Merci quand même  ++ et bonne prog 
|
|
jeudi 25 janvier 2007 à 20:11:06 |
Re : Structure d'un moteur

yann_lo_san
|
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.
Si tu es intéressé par un mini moteur d'affichage sans lib externes (tout fait à la main) : http://www.cppfrance.com/codes/VIEWER3D-CPLUSPLUS-WIN32-LIT-FICHIERS-ASE-3DSMAX_39484.aspx
Ce n'est pas un moteur pour faire des jeux mais d'affichage simplement.
|
|
jeudi 25 janvier 2007 à 20:32:28 |
Re : Structure d'un moteur

Skyffer3
|
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 
|
|
jeudi 25 janvier 2007 à 20:52:40 |
Re : Structure d'un moteur

yann_lo_san
|
Je pense que tu fais une erreur de logique dans ton raisonnement. afficheCube ne doit pas exister !
// construit un objet 3d (cube ou sphere ou n'importe) Objet3d monObjet3d(x, y, z, ect....);
et :
afficheObjet(monObjet3d); // n'importe quel objet
Sur la base d'une struct ou class
struct objet3d { int nombreFace; VERTEX vertices; int x, y, z; float dist; ect... };
|
|
jeudi 25 janvier 2007 à 21:02:22 |
Re : Structure d'un moteur

Skyffer3
|
Donc en fait je cree une structure nouvel objet que je cree si j'ai bien compris ? Merci beaucoup, si c'est ca je vais m'orienter vers cette piste ++ et bonne prog 
|
|
jeudi 25 janvier 2007 à 21:07:52 |
Re : Structure d'un moteur

yann_lo_san
|
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.
|
|
jeudi 25 janvier 2007 à 21:14:17 |
Re : Structure d'un moteur

Skyffer3
|
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 Je ne peux plus retrouve toutes ses valeurs ? ++ et bonne prog 
|
|
jeudi 25 janvier 2007 à 21:20:45 |
Re : Structure d'un moteur

yann_lo_san
|
Mais non, y'a une instance de la struct pour 1 cube, une instance pour une sphere, une instance pour n'importe quel objet ect....
objet3d mesObjets[1000];
mesObjets[0] = cube; mesObjets[1] = sphere;
afficheObjetUnitaire(mesObjet[0]) { // affiche le cube }
afficheObjetUnitaire(mesObjet[1]) { // affiche sphere }
modifi le cube : mesObjets[0].coord.x = 10;
afficheObjetUnitaire(mesObjets[0]) { // affiche cube modifié }
|
|
Cette discussion est classée dans : 3d, classe, structure, moteur, rendu
Répondre à ce message
Sujets en rapport avec ce message
Moteur 3D, gestion des collisions [ par fabienGL ]
Bonjour, je vous écris car j'ai 2 question :1)OpenGL c'est une librairies graphiques, pourtant entends-t-on parler de moteurs 3D j'aurais aimé savoir
comment faire un moteur 3d [ par 33roumi ]
je voudrai savoir les base pour faire un moteur 3Den open gl ou direct Xcar j'ai bo lire vo message mais j'i comprend riendites moi o moin la directiv
moteur 3d [ par FleXus ]
Bonjour Je suis à la recherche d'un moteur 3d capable de génererdu "3d landscape rendering" ( comme truevision3d www.truvision3dsdk.com ) mais étant c
Moteur 3d OpenGL [ par Stormy ]
Salut. Je recherche des personnes motives pour travailler sur un moteur 3d sous OpenGL. Les bases sont deja etablies (Detection de collisions, sons, m
Moteur 3D isométrique [ par cyberlewis ]
Slt,J'ai réalisé le début d'un moteur de jeu 3D isométrique (tiles 64x32), mais je n'arrive pas du tout à gérer le scrolling ...Ou puis-je trouve svp
Structure dans une classe [ par briscard ]
Hello world!!A ton le droit de passer une structure du type: struct { char *Gamma = new char[3]; char *Phase = new char[3]; }donnee;dans u
Moteur 3d [ par xarier ]
Please est ce quelqu'un a un lien au une doc ou je peut trouvé comment réalisé un moteur 3d en opengl doc +source qs merciXarier@hotmail.comhttp://ww
3D ENGINE [ par xarier ]
SALUT VOILA j'ai deux question la premiere c comment realiser un moteur 3d c vous avez des cours c simpa et surtot avec opengl 2eme question est ce qu
ca existe un moteur 3d directx en C et pas C++? [ par yerick ]
j'ai beau cherché je ne trouve pas.meme pas une petite librairie.ya pas quelqu'un qui pourrait pondre un petit moteur 3d (meme tres simple) qui utilis
Livres en rapport
|
Derniers Blogs
POUR RAPPEL ! LES SPéCIFICATIONS DES PROTOCOLES OFFICE ET SHAREPOINT SONT DISPONIBLES SUR MSDNPOUR RAPPEL ! LES SPéCIFICATIONS DES PROTOCOLES OFFICE ET SHAREPOINT SONT DISPONIBLES SUR MSDN par neodante
Quelle est le point commun entre : Microsoft il y a 10 ans et Apple aujourd'hui ? Réponse: avoir une politique de protocoles propriétaires et fermés :) Car pour rappel (si si je vous assure c'est important de le rappeler), la majorité des spécifications e...
Cliquez pour lire la suite de l'article par neodante JOYEUX ANNIVERSAIRE NIXJOYEUX ANNIVERSAIRE NIX par ebartsoft
Souhaitons un bon et joyeux anniversaire à notre hôte à tous, Nix.
Je ne le répéterais jamais assez mais sans lui rien ne serait possible. Il défit en permanence les lois de la gravité et comme il le dit si bien, si tu lui fais confiance ça devra...
Cliquez pour lire la suite de l'article par ebartsoft IMAGINE CUP 2012, MAKE A SIGN EN FINALEIMAGINE CUP 2012, MAKE A SIGN EN FINALE par junarnoalg
Voilà qui est fait, la nouvelle est officielle ! L'équipe belge "Make a Sign" va au pays des kangourous défendre son projet dans la catégorie Software Design. http://www.imaginecup.com/CompetitionsContent/Competition/WorldwideFinalists.aspx V...
Cliquez pour lire la suite de l'article par junarnoalg KINECT 1.5 IS OUT !KINECT 1.5 IS OUT ! par Vko
La version 1.5 du Kinect For Microsoft vient tout juste de sortir ! Plein de nouveautés: Tracking de squelette en Near Mode Détection en position assise Détection faciale avec un SDK dédié Documentation et des guideline (enfin) Un out...
Cliquez pour lire la suite de l'article par Vko LES ACTUALITéS DE LA SEMAINE SUR C2I.FR (14 MAI - 20 MAI) LES ACTUALITéS DE LA SEMAINE SUR C2I.FR (14 MAI - 20 MAI) par richardc
Mise à jour des Web API du 14 Mai
Réservez dès maintenant votre journée du 20 juin pour le Windows Azure Dev Camp 2012 à Paris
Mise à jour de Team Foundation Service
MechCommander 2 sur Windows 8
Entity Framework 5 Release Candidate e...
Cliquez pour lire la suite de l'article par richardc
Forum
MATLAB PROGRAMME MATLAB PROGRAMME par wahab1087
Cliquez pour lire la suite par wahab1087 RGB2GRAYRGB2GRAY par musa18
Cliquez pour lire la suite par musa18
Logiciels
sDEVIS-FACTURES vlPRO (8.1.0.3)SDEVIS-FACTURES VLPRO (8.1.0.3)sDEVIS-FACTURES vlPRO a été mis au point pour les particuliers, créateurs, entrepreneurs, artisa... Cliquez pour télécharger sDEVIS-FACTURES vlPRO 974 Application Server (12.2.4.6)974 APPLICATION SERVER (12.2.4.6)Développez de puissantes applications dans un environnement de 'cloud computing', clusterisé, séc... Cliquez pour télécharger 974 Application Server vPicture (1.4.2.1)VPICTURE (1.4.2.1)Avec vPicture, hébergez vos images facilement et rapidement.
vPicture est un utilitaire simple, ... Cliquez pour télécharger vPicture Easy-Planning (2.2.1.6)EASY-PLANNING (2.2.1.6)Easy-Planning permet de créer des plannings sous la représentation de diagrammes et est adapté au... Cliquez pour télécharger Easy-Planning COM-BACKUP (2.0)COM-BACKUP (2.0)
COM-BACKUP est un logiciel de sauvegarde qui permet de planifier les sauvegardes de vos dossiers ...
Cliquez pour télécharger COM-BACKUP
|