begin process at 2010 02 10 00:49:31
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Graphique

 > EBAUCHE D'UN MOTEUR 3D ISOMÉTRIQUE

EBAUCHE D'UN MOTEUR 3D ISOMÉTRIQUE


 Information sur la source

Note :
Aucune note
Catégorie :Graphique Source .NET ( DotNet ) Classé sous :Isométrique, moteur, librairie, jeu, GDI Niveau :Débutant Date de création :04/11/2008 Date de mise à jour :05/11/2008 12:04:09 Vu / téléchargé :4 562 / 269

Auteur : ansizak

Ecrire un message privé
Commentaire sur cette source (11)
Ajouter un commentaire et/ou une note

 Description

Cliquez pour voir la capture en taille normale
Bonjour,
J'ai pas mal galéré à obtenir le modeste résultat ci-joint.
Peu importe, je propose ici une petite source (rien de bien méchant) pour les débutants qui souhaiteraient comprendre comment réaliser un moteur 3D Isométrique en utilisant uniquement la librairie GDI+ intégrée à Visual Studio.
Il n'est bien sur pas encore complet; il manque l'application des textures un point sur lequel je reste bloqué ainsi que la rotation de la carte.
Cette application ouvre un fichier .map (fichier texte dans lequel on stocke les dimensions de la carte ainsi que "l'altitude" des points qui la composent).

Son fonctionnement est simple à comprendre, malheureusement moins à expliquer:
On construit un rectangle composé lui-même d'un quadrillage de carrés;
en effet le fichier .map contient autant de valeurs qu'il doit y avoir de points sur la carte. Ces points sont reliés pour créer un quadrillage.
Ensuite, on créé l'illusion de la 3D (la fameuse 3D isométrique) en réduisant les coordonnées Y (ordonnées) de chaque point de moitié et en décalant les coordonnées X (abscisses) auxquelles on ajoute la valeur Y/2.
Pour donner l'illusion de relief on ajoute à chaque coordonnée Y de chaque point sa valeur de hauteur (contenue dans le fichier .map) multipliée par un coefficient qui n'est autre que le format de chaque carré divisé par 2...

Je suis conscient que mon code mérite d'être révisé et mieux commenté, donc.. à vous de juger.

Cordialement,
Anz.



 Fichier Zip

Les Membres Club peuvent télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip


 Historique

04 novembre 2008 21:20:34 :
Oups ! Un petit oubli provoquait une erreur lorsque l'on essayait d'ajouter une colonne ou ligne à la carte.. Ceci à été réparé
05 novembre 2008 11:15:49 :
Voici un petit screenshot pour les curieux..
05 novembre 2008 12:04:10 :
Quelques petites explications supplémentaires dans le descriptif..

 Sources de la même categorie

Source avec Zip Source avec une capture Source .NET (Dotnet) NOTIFICATIONS DANS UN DELEGATE ASYNCHRONE par olivieram2
Source avec Zip Source avec une capture Source .NET (Dotnet) PIXEL SHADER - CRÉATION, UTILISATION, ET BINDING par yoannd
Source avec Zip Source avec une capture Source .NET (Dotnet) UITYPEEDITOR HACKING, PROPERTYGRID ET LISTVIEW CONFIGURABLES... par gourky
Source avec Zip Source .NET (Dotnet) CONVERTION D'UNE IMAGE EN G-CODE, GRAVURE CNC par gourky
Source avec Zip Source .NET (Dotnet) CAROUSEL EN WPF (USERCONTROL) par CoolSpirit

 Sources en rapport avec celle ci

Source .NET (Dotnet) REVERSI (OTHELLO) [C#2008] par Hyunkk
Source avec Zip Source avec une capture Source .NET (Dotnet) ADDYSCRIPT: UN MOTEUR DE SCRIPT POUR .NET par addy
Source avec Zip Source avec une capture Source .NET (Dotnet) IMAGINE: BASE D'UN MOTEUR 3D DIRECTX par Children
Source avec Zip Source .NET (Dotnet) CHESS GAME CORE - LIBRAIRIE JEU D'ÉCHEC EN C# par Bidou
Source avec Zip Source avec une capture Source .NET (Dotnet) TETRIX.NET PROJET DE FIN DE SESSION par badrbadr

Commentaires et avis

Commentaire de vbmaniac8 le 05/11/2008 10:26:56

Salut,

Je n'ai pas la library ComponentFactory.Krypton.Toolkit. Comment faire pour l'ajouter?

Merci.

Commentaire de wizad le 05/11/2008 10:35:47

Dommage pour un moteur graphique de ne pas mettre un screenshot...
En tout cas je jetterais un ½il car l'initiative me semble intéressante.

Par contre j'aurais voulu en savoir un peu plus sur ce qui ta poussé à opter pour GDI plutôt que du WPF ou du XNA qui on le mérite de faire appel à la carte graphique (si elle est présente - pour wpf)

Commentaire de ansizak le 05/11/2008 11:06:32

Bonjour,
En effet, j'ai oublié de préciser que j'avais ajouté la librairie component factory. (que j'utilise uniquement pour l'apparence des controls et forms).
On peut la trouver à cette adresse: http://www.componentfactory.com/downloads/KryptonToolkit285.zip

J'ai opté pour GDI+ car il s'agissait de ma première expérience en terme de composant graphiques et je souhaitais bien comprendre les mécanismes 2D.
Le XNA possède des méthodes bien plus puissantes mais GDI à l'avantage de m'avoir fait pas mal réviser mes maths :p

Commentaire de vbmaniac8 le 05/11/2008 12:11:53

Oui, j'ai trouvé, j'ai installé la version 3.0.8 et ça fonctionne..

Merci!

Commentaire de SwitchApocalyps le 09/11/2008 13:03:20

Cette source utilise C# 2 ou c# 3 ?

Commentaire de lolo_thomas le 10/11/2008 10:46:12

Très bonne initiative.
Je pense cependant que lorsque ton code sera stabilisé fonctionnellement, il faudra passer par une phase d'optimisation des calculs.
Par exemple, dans quasiment toutes les méthodes de la classe map, tu réalises plusieurs fois à la suite les mêmes calculs donc certains sont extrêmement couteux en temps CPU vu qu'ils opèrent sur des float:
- Math.Cos(vars.angle)
- Math.Sin(vars.angle)
- (vars.down * vars.yy / 2) - (vars.up * vars.yy / 2)
- (vars.right * vars.xx / 2) - (vars.left * vars.xx / 2)

Bon courage,
Laurent.

Commentaire de ansizak le 10/11/2008 15:12:34

- Pour c# 2 ou 3, aucune idée, j'ai simplement créé un projet dans VS 2008 Express..

- En effet,
Je n'ai pas pris conscience de l'utilisation du CPU, mais séparer ces calculs en plusieurs étapes me permet de me retrouver dans les différentes phases de la mise en perspective.
Pour ce qui est des Math.Cos(vars.angle), Math.Sin(vars.angle), ils ne sont utilisés que s'il y a rotation de la carte, ce qui n'est pas encore fonctionnel pour le moment :s
D'ailleurs, pour activer la rotation, effectuer un clic droit sur le menu "interact" et cliquer sur "enable rotate". Le bouton "rotate" devient alors utilisable mais ma rotation ne s'effectue pas vraiment comme attendu.
Si vous avez une idée du problème, tenez moi au courant :)

Merci pour les commentaires.

Anz.

Commentaire de Heandel le 10/11/2008 19:25:31

Salut!

Si tu veux faire un moteur 3D isométrique, je te conseille de laisser tomber GDI+ et de passer directement à DirectX ou OpenGL, il suffit de modifier la matrice de vue pour obtenir le résultat voulu.

Les performances et la facilité seront grandement améliorées.
De plus, appliquer des textures te semblera tout naturel.


Bonne continuation ;)

Commentaire de ansizak le 12/11/2008 14:39:12

Salut,

Merci, je reprécise, le but ici n'est pas d'obtenir le résultat le plus performant mais bien de comprendre son fonctionnement :)

Cordialement

Commentaire de jyce3d le 14/11/2008 13:42:21

Salut Ansizak,

Je comprends ton approche étant donné que j'ai eu une approche similaire dans les années 2003 pour réaliser un petit moteur de rendu 3D qui se manipule au moyen de commandes scripts.
Les sources sont d'ailleurs présentes dans Codes-Sources (3D-Crade Wire Modeler)

Toutefois, je me suis aussi très vite rendu compte des limitations qu'offraient cette approche de la 3D. Et à partir du moment où tu veux réellement developper quelque chose d'utilisable en pratique, il est mieux de passer à DirectX ou OpenGL. (Rassure toi, les connaissances mathématiques nécéssaires pour bien comprendre comment ta carte graphique fonctionne, ne sont pas tristes non plus).

Ceci, dit si tu es intéressé par l'aspect mathématique de la projection en perspective (ce qui inclu aussi les rotations autours des axes, mais malheureusement sans l'usage des quaternions), j'ai écrit un petit document pdf qui se trouve en téléchargement libre sur mon site (Cela s'appelle Aspects théoriques de la 3D, section documentation, bon je n'en dit pas plus pour ne pas faire de pub sur Codes-sources ;-) ).

Je suis en train de developper un autre tuto sur la manière d'utiliser les matrices views, ainsi que les matrices de projection en DirectX. Pour l'instant, je n'ai malheureusement pas suffisamment de temps que pour m'investir beaucoup plus dans ce domaine que j'affectionne beaucoup. Mais j'espère pouvoir m'y consacrer un peu plus l'année prochaine, de plus il est toujours intéressants de rencontrer d'autres adeptes ;-)

Salutations,
Jyce3d.

Commentaire de ansizak le 17/11/2008 13:43:59

Salut à toi Jyce3d.
En effet, loin de moi l'idée de dénigrer Direct X et OpenGL même si je dois avouer ne pas m'y être vraiment encore plongé. Je me suis simplement dit que si je parvenais déjà à bien comprendre les mécanismes de la projection 3D à partir d'un plan 2D, l'utilisation de fonctions 3D me serait plus aisément compréhensible. J'ai la fâcheuse tendance à ne pas apprécier d'utiliser fonctions et méthodes dont je ne saisis pas le fonctionnement sous-jacent.

En tout cas merci à toi, je vais de ce pas rechercher tes tutos :)
A bientôt.

Cordialement,
Anz.

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

pourquoi le GDI+ est si lent [ par NICKO02 ] Voila, j'ai commencé il y a peu a creer des graphiques à l'aide du GDI+ de .net.J'utilise principalement les methodes DrawString() et DrawLine().C'est Imprimante / Configuration de la page [ par zouzounet ] Bonjour,J'ai un petit soucis avec une impression dans un prog.J'utilise du GDI+ pour tracer un tableau, que je rempli de texte (toujours avec GDI+) et lancement d'une appli [ par rintchu ] salut a tous,voila, je voudrais mettre dans mon programme un jeu secret comme ceux que l'on trouve dans Word ou Excel. Comment dois je faire pour reli Objets 3D et diverses propriété possibles [ par Trollien ] Bonjour,je cherche à créer un moteur 3D que j'ai déjà mis en ligne et que je mettrais à jour au "fur et à mesure" (hummmm).Mais debutant completement Changer l'image d'un label ... [ par Baelorn ] Bonjour,je suis actuellement en train de réaliser un jeu en C# mode graphique et je rencontre un problème au niveau du changement de l'image d'un labe jeu vache taureau language c [ par cafou ] est ce que quelqu'un pourrait me donner la solution du jeu vache taureau en language cmerci d'avanceCAFOU Probleme de librairie [ par giorgio08 ] Bonjour a tous, dans mon applic C#, j ai été amené a créer des etats crystal report et ca fonctionne bien sur mon pc.Mais qd je veux le deployer sur u Moteur wiki [ par kropotkine ] Bonjour à tous,J'aimerais réutiliser le moteur wiki de dotclear pour l'incorporer dans un mini trairement de texte, mais comment faire ??? Jeu de cartes en reseau [ par PeterG ] J'ai créer un jeu de Black Jack (2 joueur et +) avec visual studio dans mon cours de programmation 1, et j'aimerai pouvoir y jouer contre un ami chacu Jeu en réseau local [ par CMatt ] Bonjour à tous!J'ai développé un petit jeu en C# qui possède une "base de données" plutôt complexe, par ex. : - une classe Systeme contient un tabl


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Février 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,577 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales