Moteur 3d statique : dispostion d'objets et dessin

Soyez le premier à donner votre avis sur cette source.

Vue 27 047 fois - Téléchargée 2 225 fois

Description

Comme le titre l'indique, il s'agit bien ici d'un pseudo Moteur 3D.

Vous trouverez ici trois sources, dont deux de 3D et une étant juste un outil.

1) Disposition d'objets sur une grille 3D :
Deux grilles se dessinent sur le plateau principale. Sur la petite grille en 2D sur laquelle on disposer les objets (aperçu du plateau vu de dessus). Et sur la grande grille en 3D isométrique, les objets se positionnent en fonction (c'est le cas de le dire !) de l'emplacement des objets correspondants sur la petite grille 2D.
Gère le devant-derrière grâce à "swapDepths(profondeur)"

2) Points et Dessin :
C'est un effet de 3D. Le dessin se fait au fur et à mesure (enterFrame) en fonction de points prédéterminés dans un tableau. Une fonction unique :
Dessinner(nom du clip, mode, x, y, z, x_curve, y_curve, z_curve)
nom du clip : indique le nom du clip pour dessinner (createEmptyMovieClip)
mode : comme pour le dessin en 2D (moveTo, lineTo, curveTo)
x, y, z : coordonnées 3D du nouveau point (converties en 2D par la fonction)
x_curve, y_curve, z_curve : de même si le mode est curveTo

3) Enregistrement Coordonnées 2D pour 3D ISO :
Simple outil pour le fichier précédent. Il permet de créer un tableau contenant le coordonnées de votre dessin. Directement réexploitable comme indiqué dans "Points et Dessin".

Source / Exemple :


// arf ! Il y a beaucoup trop de code !!
// voila quelques bribe ... le reste est dans le zip !

function Positionner(Objet, x, y) {
	_root[Objet]._x = xG+(x+y)*aG;
	_root[Objet]._y = yG+(y-x)*bG;
}

// Particulier à l'isométrique
function Point(x3D, y3D, z3D) {
	//X = x+y et Y = y-x+z
	x2D = (x3D+y3D)*aG+xG;
	y2D = (y3D-x3D)*bG-(TotalCases-z3D)*hG+yG;
	//Renvoi sous forme d'un tableau
	return ([x2D, y2D]);
}

Conclusion :


Une nouvelle source est prévue dés que je l'aurai finie. L'une permettra de mettre du remplissage dans vos dessins 3D ; et l'autre sera un moteur de déplacement d'une voiture dans un environnement 3D. Si vous avez quelques idées à ce propos, n'hésitez pas à me les donner :-)

Dernière mise à jour : correction d'un bug de profondeur. (Certains objets qui devait se trouver devant passait derrière et vis-versa ; de plus, il arrivait que des objets disparaissent car remplacés par de nouveaux objets)

Codes Sources

A voir également

Ajouter un commentaire Commentaires
Messages postés
137
Date d'inscription
lundi 10 janvier 2005
Statut
Membre
Dernière intervention
28 août 2007

c cool mais il est ou le zip?
Messages postés
1158
Date d'inscription
vendredi 21 février 2003
Statut
Membre
Dernière intervention
6 août 2010

Ben pourquoi pour avoir 2 coordonnées à partir de 3, tu ne calcule spas tes deux avec 2 des trois dispos ??? Si t'as comme un _x, et _y et _z (ou autre). Tu gardes légèrement retouchés (si elles sont pas le _x du _root et son _y) deux des ces trois dernières....
Messages postés
842
Date d'inscription
dimanche 24 novembre 2002
Statut
Membre
Dernière intervention
2 juillet 2007

La source a été mise à jour.

J'ai corrigé un bug de profondeur.
J'ai ainsi créé une formule permettant de calculer la profondeur d'un point (distance par rapport à l'écran) en fonction de ses coordonnées 3D. j'ai ainsi 2 coordonnées 3D qui me donnent 3 coordonnées 2D, c'est totalement illogique mais nécessaire.
Messages postés
842
Date d'inscription
dimanche 24 novembre 2002
Statut
Membre
Dernière intervention
2 juillet 2007

Oups, j'ai l'impression de me faire des fleurs. C'est en fait mon frère qui a utilisé mon PC.

Désolé...
Messages postés
842
Date d'inscription
dimanche 24 novembre 2002
Statut
Membre
Dernière intervention
2 juillet 2007

Alors là mon grand, félicitation !
C'est vraiment un code de génie. Je sens en toi le destin d'un excellent programmeur.
Continu dans cette voie, tu vas faire des prodiges.

bon allez, je te met 10 / 10
Afficher les 9 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.