Accueil > Code > Moteur 3D sous Flash

Moteur 3D sous Flash

Il y a longtemps, en octobre 2003 (fichtre… un coup de vieux…), j’avais codé un petit moteur 3D en AS1, permettant d’afficher des wireframes d’objets à partir d’un fichier XML.

J’ai repris le même principe pour cette note, mais en recodant la classe en AS2, parce que quand même, c’est plus mieux. J’en ai également profité pour coder un petit exporteur pour 3D Studio Max afin d’afficher des objets plus complexes. Un exemple en image:

[NdT: A pu :( ]

Cette petite démo n’existe pas tant pour l’aspect que pour la technique de calcul et de rendu. Elle intègre notament la multiplication de matrices, et le rendu est fait sur le principe Vertex Buffer/Index Buffer cher à nos cartes graphiques, sans pousser toutefois le vice jusqu’à nécessiter des primitives triangulaires.

Voici le code source de la classe: com.tynril.render – Fichier .as

Voici comment utiliser cette classe:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
import flash.geom.Point;
import com.tynril.render;
 
_root.createEmptyMovieClip("cCube", 0);
var rCube:render = new render(_root.cCube, "box.xml", new Point(150, 150));
rCube.onLoad = function(Success:Boolean):Void {
	if(!Success) {
		trace("Erreur de chargement!");
		return;
	}
	rCube.applicateTransform(rCube.rotateY(-(Math.PI / 2) - .5));
	cCube.onEnterFrame = function() {
		var f:Number = .05;
		rCube.applicateTransform(rCube.rotateX(f));
		rCube.applicateTransform(rCube.rotateY(.01));
		rCube.refresh();
	};
};

Et finalement, voici le script d’export pour 3DSMax (fonctionne avec la version 8, normalement aussi avec les précédentes), qui permet d’exporter un mesh dans le format XML lisible par la classe render.

Voili voilou, j’essayerai de détailler dans d’autres notes le fonctionnement de tout ceci. C’est normal que le FPS soit bas, la carte graphique n’est pas utilisée par Flash. Bon, il est tard, allons dormir. Allez, salut.

Categories: Code Tags: ,
  1. 30/10/2007 à 14:09 | #1

    Tain, je suis passablement dégouté d’avoir perdu ça. :/

  1. Pas encore de trackbacks