Ebauche d'un moteur 3d isométrique

Soyez le premier à donner votre avis sur cette source.

Vue 11 471 fois - Téléchargée 834 fois

Description

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.

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

Messages postés
191
Date d'inscription
mercredi 11 juillet 2007
Statut
Membre
Dernière intervention
30 juin 2011

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.
Messages postés
15
Date d'inscription
vendredi 2 novembre 2007
Statut
Membre
Dernière intervention
17 septembre 2009

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.
Messages postés
191
Date d'inscription
mercredi 11 juillet 2007
Statut
Membre
Dernière intervention
30 juin 2011

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
Messages postés
4
Date d'inscription
mercredi 21 juin 2006
Statut
Membre
Dernière intervention
10 novembre 2008

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 ;)
Messages postés
191
Date d'inscription
mercredi 11 juillet 2007
Statut
Membre
Dernière intervention
30 juin 2011

- 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.
Afficher les 11 commentaires

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.