Hello,
je suis actuellement en deuxième année de prépa intégrée et souhaite m'orienter dans le développement d'application 3D. J'ai déjà réalisé quelque jeu basique tel que: Morpion, Tetris, Pendu. Bien que ce n'est pas très évolué, je pense que le développement de ces projets m'a permit de me forger une expérience dans le développement de projet en général.
Souhaitant donc m'orienter dans le développement d'application 3D, je me dis qu'il serait peut-être temps de commencer à me faire une sorte de portefolio d'application 3D. J'avais donc pensé à developper un début de moteur 3D pour étendre mes connaissances en matière d'algorithmes utilisés dans la 3D. J'ai donc commencé à y réfléchir entre mes cours, et plusieurs questions (très diverses) sont apparus: j'espère que la diversités de ces questions ne posera pas de problème dans ce topic.
Note:
-> Gardez bien à l'esprit que je souhaite réaliser ce projet non pas dans le but de concurrencer Ogre (ce qui serait de toute façon impossible seul et sans expérience), mais dans le but d'apprendre le plus possible sur le développement d'application 3D et sur le développement en général.
-> Mon langage de prédilection est le C++, mais je connais également (beaucoup moins) le Java et le C#.
-> Si je fais ce projet, c'est principalement pour me forger une expérience, et ainsi avoir de quoi mettre sur mon CV.
1. L'utilisation d'UML
J'ai pour habitude d'utiliser les diagrammes de classe d'UML pour modéliser un minimum mes projets. Seulement, je me demande s'il est temps d'approfondir mes connaissances dans ce domaine avant de commencer à concevoir quoi que ce soit. Quel est votre avis sur l'utilisation d'UML dans un tel projet ? Est-elle nécéssaire, m'apportera t-elle un plus lorsque je serai en recherche de stage ou de job ?
2. Apprendre UML
Si votre réponse à la question 1 va dans le sens d'apprenre UML, avez-vous des livres à me conseiller ou des approches ? J'ai pu remarqué qu'il existait deux approches pour apprendre UML: l'approche classique, ou on apprend l'histoire d'UML, ce qu'est UML, la syntaxe etc ... puis des exemples. La deuxième approche étant une approche "par la pratique" ou on a un projet dès le début et où on apprend UML au fur et à mesure.
3. Gestion des ressources
J'ai dans un premier temps essayé de m'imaginer comment serait la gestion des ressources, et je dois avouer (c'est peut-être stupide) que je me suis confronté à un problème. Imaginons que je possède une classe MeshManager qui a pour rôle de gérer le chargement des Meshs. Imaginons le code suivant:
Mesh* mesh = MeshManager::GetMesh("plante.obj"); // Récupération du Mesh plante.obj
Mesh* mesh2 = MeshManager::GetMesh("plante.obj"); // Récupération du Mesh plante.obj
Imaginons maintenant que dans ma scène, j'ai plusieurs plantes (donc deux ici) et que la première vient à être modifiée: soucis car la deuxième, vu que c'est un pointeur, elle va également voir son mesh modifié. J'avais pensé à une autre approche du MeshManager: lorsque je fais:
Mesh* mesh = MeshManager::GetMesh("plante.obj") // Récupération du Mesh plante.obj
Et bien la méthode chargerait d'abord le Mesh s'il n'existe pas (création d'un objet Mesh dans le gestionnaire de Mesh) puis lorsque la valeur de retour serait plutôt une copie du Mesh. Donc pas besoin de recharger le Mesh (parser le fichier obj) mais plutôt de copier seulement les tableaux de sommets. Est-ce une bonne approche ou est-elle coûteuse en ressource ?
4. Utilisation du C++
Je souhaitais dans un premier temps utiliser le C++ pour réaliser ce projet car il est mon langage de prédilection. Je n'ai jamais développé de "gros" (je ne pense pas qu'on peut qualifier un Tetris de gros projet) projet dans un autre langage sauf en Ruby. Bref, je me suis demandé s'il ne serait pas plus judicieux d'aborder un autre langage qui serait plus adapté pour la conception objet ? Enfin, je me suis dit que me destinant à être ingénieur, le choix du langage n'influencerait pas, étant donné que je dois être capable de m'adapter rapidement à la technologie qui me sera proposée. Quel est votre avis sur ce point ?
5. Fonctionnalité de base
Comme je l'ai dis dans le point 3, j'ai déjà commencé à réfléchir au projet, et j'ai donc dressé une liste des fonctionnalités de base (je me suis renseigné sur le sujet) que j'aimerai intégrer:
- Chargement de quelque format de fichier: obj, 3ds, md2, md5.
- Système de gestion de ressource robuste ayant une architecture permettant facilement l'ajout d'un type de texture.
- Gestion des Shaders.
- Éclairage dynamiques grâce à l'utilisation des Shaders.
- Gestion de terrain de type HeightField.
- Proposer plusieurs type de Caméra.
- Implanter divers algorithmes de partitionnement de l'espace (notamment avec les octrees (par certains par contre ici))
- Réaliser divers effets avec les Shaders, tel que l'effet cartoon ou autre, juste pour avoir quelques effets permettant de montrer divers algorithmes.
Que pensez-vous de ces fonctionnalités ? Est-ce que j'ai oublié le plus important ?
6. Un projet réalisé avec le moteur
Ce n'est pas dans mes priorités, mais j'avais pensé à utiliser ce moteur une fois termine (je compte le terminer, même si cela me prend quatre années) dans un projet relativement petit: une sorte de FPS ou RTS basique. Rien de bien compliqué, juste un projet basique. Pensez-vous que le choix d'un type de jeu doit influencer l'architecture d'un moteur 3D ?
Je pense avoir fais le tour de mes interrogations. Je ne sais pas s'il est nécessaire de le souligner, mais j'utiliserai OpenGL comme API. J'utiliserai également Boost et la STL. Quel est votre avis sur la faisabilité d'un tel projet ?
Je vous remercie d'avance de m'avoir lu, et espère que le mélange de ces questions ne fermera pas mon topic. Bonne journée.
Partager