Imagine: base d'un moteur 3d directx

Soyez le premier à donner votre avis sur cette source.

Vue 10 181 fois - Téléchargée 1 858 fois

Description

Voilà une maj de la source que j'ai poster cet été.

Il s'agit d'une ébauche d'un moteur 3D, qui permet de placer des objets 3D importés depuis des fichiers .x ou des modèles 3d prédéfinis, de les tournée et d'appliquer de la lumière.

Le moteur n'est absolument pas optimisé et tourne entre 25 et 60 FPS en mode fenêtré (comparé au 200 FPS du sdk)

Les sources qui m'on permis de le réaliser:
- http://www.vbfrance.com/codes/EBAUCHE-MOTEUR-3D-DIRECTX_41763.aspx
- http://www.csharpfr.com/codes/DX9-TUTORIEL-MESHS_11568.aspx
- http://www.csharpfr.com/codes/BOX3D-DIRECTX_41948.aspx (dont j'ai repris la texture)
- http://www.cppfrance.com/codes/DETECTION-COLLISIONS-3D_46530.aspx
et de quelques tutos de http://thezbuffer.com/articles/315.aspx en vb.net pour comprendre certains fonctionnements.

Les fonctionalités:
- Texturage/Modification des "materials" d'un objet
- Placer, déplacer, tourner un objet
- Propriétés d'un objet (à voir dans la source, BoundingBoxMinValue, BoundingBoxMaxValue, scale, visible, etc.)
- Gérer les entrées utilisateur (clavier, souris, joystick)
- Caméra libre/Caméra suivant un "acteur" (j'ai pris le tigre du sdk), en appuyant sur F12
- Méthodes pour écrire et dessiner à l'écran (à amélioré grandement)
- Modèles 3D prédéfinis (cubes et plans, j'aurais aussi aimé ajouter la sphère mais j'ai aucune idée de comment faire, donc j'ai rajouté DXSphere qui créer une sphere à partir des modèles DirectX où je ne sais pas modifier les textures et les vertices)
- Application de lumière
- Gestion du sons (lire un sons ou une musique depuis une playlist, modifier le volume)
- 2 niveaux (appuyez sur F1 et F2, le premier niveau étant F2, cf Game.cs et LEVEL/)
- Détection des collisions (mais pas gestion, je n'ai pas réussi à gérer les collisions sans descendre en dessous de 1fps :p)

Pour le premier niveau j'ai repris des textures de Trackmania (Stadium) au format dds. Pour l'autre niveau je croit que je les avait pris sur thegamecreator(fps creator)

Source / Exemple :


Classes:

GameEngine.cs:

Classe regroupant toutes les fonctions du moteur:
- Initialize(InitializeFlags[]) = permet d'initialiser le device (l'affichage), les clases, et le rendu

- Render() = rendu de la scene

- Display = fournit les options concernant l'affichage (qualité, résolution, etc.)ion,

- Objects[] = contients la collection de tout les objets

- Camera = fournit les options sur la caméra (rotation / déplacement etc.)

- Lighting = fournit toutes les options pour créer de la lumière

- Screen = fournit des options pour l'affichage 2D (dessin d'image, affichage de texte, etc.)

- Models = fournit des models 3D prêt défini et des fonctions sur les textures et matériaux

- Sound = fournit des options pour ajouter de la musiques et des sons

- Data = fournit la collection de donnée

- Property = membre de Objects[] , collection générique de type <string, object> permettant d'accéder à des propriétés fictives

- Input = fournit des méthode sur la saisie du claier, de la souris et du joystick

- Physics = moteur phisique (collision, intersection, etc.)

Gestion d'erreur:

WriteErrorEnable = écrit les erreurs dans la console si true

Conclusion :


Les ressources étant trop grosse (34.5Mo) je les aient mise en ligne sur mon site (contient tous les mesh, texture, et musiques nécessaires).
A placer dans \bin\Debug\ :
http://cid-657f6a23e735c8b6.skydrive.live.com/self.aspx/Public/Imagine%20-%20bin%5E_debug.zip

Le rendu des objets ne se fait pas dans GameEngine, mais dans GameObject pour rendre la source plus facile à comprendre.

Pour ceux qui ne comprennent pas GameModel, sachez qu'un vertex est un vecteur avec d'autres données (x, y, z, texture, couleur, etc.) et qu'un objet est constitué de triangles dont les sommets relier entre eux sont les vertex.

Codes Sources

A voir également

Ajouter un commentaire Commentaires
cs_Children Messages postés 84 Date d'inscription lundi 5 février 2007 Statut Membre Dernière intervention 29 avril 2009
31 déc. 2009 à 14:27
Alors enlever l'espace dans le lien je sais pas pourquoi il revient toujours, voic le lien:
http://cid-657f6a23e735c8b6.skydrive.live.com/self.aspx/Public/Imagine%20-%20bin%5E_debug.zip
cs_Children Messages postés 84 Date d'inscription lundi 5 février 2007 Statut Membre Dernière intervention 29 avril 2009
27 déc. 2009 à 20:49
Aller hop une petite mise à jours pour le nouvel an.
cs_Children Messages postés 84 Date d'inscription lundi 5 février 2007 Statut Membre Dernière intervention 29 avril 2009
16 oct. 2009 à 22:02
Complètement null se fichier collision comment j'ai put poster sa, en faite je suis partit sur le principe qu'on à un terrain générer à partir d'une height map et donc qu'on à tous les points stocké dans un tableau... bon ba lisez pas le fichier (pour le trop peu de personne qui passe par ici), puis j'ai pas envie de recompiler le projet juste pour enlever un fichier.
cs_Children Messages postés 84 Date d'inscription lundi 5 février 2007 Statut Membre Dernière intervention 29 avril 2009
7 juil. 2009 à 15:24
La nouvelle capture ne veut pas se mettre, sa me remet toujours l'ancienne, quand cs bug... Sinon, j'ai ajouter aussi un fichier texte expliquant la manière de programmer les collisions (la flemme de les prog moi même :p)

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.