Le Blog

  • : Le blog de Romain Dedenis
  • : Un blog relatif à la programmation web, vous trouverez ici des tutoriels sur différents langages tel que le flash, le php... Ainsi que différentes astuces et articles. Bonne visite :)
  • Contact

Contacts

viadeo-icone-5757-48.png linkedin.png

Liens Utiles

 

Documentation Flash as 3.0 :

Flash as 3.0

 

Documentation moteurs 3D Flashs :


Documentation Utilitaires 3D Flashs :

Et bien sûr, le fil RSS du Blog ! rss

16 mars 2010 2 16 /03 /mars /2010 15:51
Sandy 3D nous permet d'importer des objets 3D type Collada puisqu'il intègre un parser de fichier DAE.

I/ Import d'un fichier DAE

Pour se faire, nous allons repartir de notre tout premier tutoriel où nous avons écrit notre squelette Sandy 3D ( Sandy 3D : Premiers Pas... ).
Il existe beaucoup de bibliothèques de modèles 3D sur internet, pour ma part j'utilise principalement celle de google disponible à l'adresse suivante : http://sketchup.google.com/.
Pour notre exemple, nous allons utiliser le modèle 3D suivant : cocotier. Choississez de télécharger le fichier sous forme Collada puis l'extraire du zip. Placer le dossier extrait dans le même dossier que notre projet PaperVision.

Code Source
package {
  import sandy.core.Scene3D;
  import sandy.core.data.*;
  import sandy.core.scenegraph.*;
  import flash.display.*;
  //Ajout
  import flash.events.*;
  import sandy.parser.*;

  public class Main extends Sprite {
    private var scene:Scene3D;
    private var camera:Camera3D;
    //Ajout
    private var parser:IParser;

    public function Main():void{
        initSandy();
        initDae();
    }
  
    private function initSandy():void{
        camera = new Camera3D(300, 300);
        scene = new Scene3D("scene", this, camera, new Group());
    }
   
    //Ajout
    private function initDae():void{
         parser = Parser.create( "Untitled/models/Untitled.dae", Parser.COLLADA, 0.5 );
         ColladaParser(parser).RELATIVE_TEXTURE_PATH = "Untitled/images"; //Chemin vers les textures
         parser.addEventListener( ParserEvent.INIT, createScene );
         parser.parse();
    }
   
    private function createScene(e:ParserEvent):void{
        scene.root.addChild(e.group);
        addEventListener( Event.ENTER_FRAME, render );
    }

    private function render(e:Event):void {
        scene.render();
    }
  }
}

Résultat Obtenu
img1
Explications

Pour importer un fichier Collada, il nous suffit d'utiliser le parser Collada intégré dans Sandy 3D pour parser notre fichier, puis afficher le résultat dans notre scène.


Voili voilou pour ce tutoriel sur l'import de modèle 3D. Nous avons fait à peu près le tour des principales fonctionnalités de Sandy 3D.



Ce tutoriel vous a été utile? rssAbonnez-vous au fil RSS !



Cordialement, Romain Dedenis.
Partager cet article
Repost0

commentaires

H
<br /> <br /> Bonjour, lorsque je lance la compilation je vois bien une partie du cocotier s'afficher mais pas entièrement (les feuilles n'apparaissent pas), de plus le haut du cocotier est posé à côté du<br /> tronc et non dessus.<br /> <br /> <br /> J'ai essayé avec d'autres modèles et ça rend pareil, les images ne s'affichent pas toutes.<br /> <br /> <br /> Sinon autre chose, une fois ces objets 3D importés dans Flash, ils sont si j'ai bien compris manipulables comme des classes et disposent des méthodes de Sandy à savoir rotationX, rotationY, z etc<br /> ?<br /> <br /> <br /> Si oui, comment les assigner au programme ? Devons-nous les assigner à un type primitif standard de Sandy ? Si oui lequel ?<br /> <br /> <br /> Merci beaucoup.<br /> <br /> <br />  <br /> <br /> <br /> <br />
Répondre
R
<br /> <br /> Pour le cocotier, je ne sais pas trop quoi te dire, cela marche chez moi... (Mais je déconseille vivement l'utilisation de sandy3d, fais plutôt un tour du coté de Away3D ;) ).<br /> <br /> <br />  <br /> <br /> <br /> Sinon, pour stocker l'objet chargé et pouvoir utiliser rotationX et ses petits copains, créer une variable qui va stocker l'objet charger dans ta classe et modifie ce morceau de code :<br /> <br /> <br /> private function createScene(e:ParserEvent):void{<br /> <br /> <br />    ta_variable = e.group;<br /> <br /> <br />    ta_variable.rotationX = 120; //par exemple<br />    scene.root.addChild(ta_variable);<br />    addEventListener( Event.ENTER_FRAME, render );<br /> <br /> <br /> }<br /> <br /> <br /> <br />