Imagine: base d'un moteur 3d directx

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

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.