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

27 février 2012 1 27 /02 /février /2012 17:14

en

 

 

Alternativa nous permet d'importer des objets 3D type 3ds Max, Collada (DAE) ainsi que son format A3D .Dans ce tutoriel, nous allons nous intéresser au format A3D, mais pour les autres, c'est la même chose, il suffira de changer le parser.

Petite appartée, pour pouvoir exporter vos objets 3D en A3D, Alternativa vous propose un plugin pour 3dsmax disponible ici : http://alternativaplatform.com/public/plugins_3dsmax2012.zip.


I/ Import d'un fichier A3D

Pour se faire, nous allons repartir de notre tout premier tutoriel ( Alternativa 3D 8 : premier pas... ).
L'import d'objets A3D est très simple donc pas de panique :).

Pour notre exemple, nous allons utiliser le modèle 3D et la texture suivante suivante : soldier. L'extraire dans le même dossier que notre projet Alternativa 3D.

Code Source
package {
   import alternativa.engine3d.core.Camera3D;
   import alternativa.engine3d.core.Object3D;
   import alternativa.engine3d.core.Resource;
   import alternativa.engine3d.core.View;
   import alternativa.engine3d.loaders.ParserA3D;
   import alternativa.engine3d.resources.BitmapTextureResource;
   import alternativa.engine3d.objects.Mesh;
   import alternativa.engine3d.materials.VertexLightTextureMaterial;
   import alternativa.engine3d.lights.AmbientLight;
   import alternativa.engine3d.lights.DirectionalLight;
   import flash.display.Sprite;
   import flash.display.Stage3D;
   import flash.display.StageAlign;
   import flash.display.StageScaleMode;
   import flash.events.Event;
   public class Main extends Sprite {
      //On embarque notre texture et notre objet 3D
      [Embed(source="combinesoldiersheet_prisonguard.jpg")] static private const SoldierTexture:Class;
      [Embed("soldier.A3D",mimeType="application/octet-stream")] static private const SoldierA3D:Class;
      private var rootContainer:Object3D = new Object3D();
      private var camera:Camera3D;
      private var stage3D:Stage3D;
      private var soldier:Mesh;
      private var ambient:AmbientLight;
      private var light:DirectionalLight;
      public function Main(){
         stage.align = StageAlign.TOP_LEFT;
         stage.scaleMode = StageScaleMode.NO_SCALE;
         camera = new Camera3D(0.1, 10000);
         camera.view = new View(640, 512);
         camera.view.antiAlias = 8;
         addChild(camera.view);
         addChild(camera.diagram);
         camera.rotationX = -90 * Math.PI / 180;
         camera.x = 239;
         camera.y = -1209;
         camera.z = -240;
         rootContainer.addChild(camera);
         //Nos lumière
         ambient = new AmbientLight(0xffffff);
         ambient.intensity = 0.2;
         ambient.x = 200;
         rootContainer.addChild(ambient);
         light = new DirectionalLight(0xffffff);
         light.intensity = 6;
         light.y = -600;
         rootContainer.addChild(light);
         //Notre soldat
         var parser:ParserA3D = new ParserA3D(); //On initialise le parser de modèles A3D
         parser.parse(new SoldierA3D()); //On lui demande de parser notre objet 3D
         //Pour charger du Collada ou 3DS, c'est le même principe, il suffit d'utiliser le bon parseur ;)
         var soldierTexture:BitmapTextureResource = new BitmapTextureResource(new SoldierTexture().bitmapData);
         //On créer notre ressource de texture
         soldier = parser.objects[0] as Mesh; //on convertit le premier objet de l'objet 3D en objet exploitable (on verra plus tard qu'il peut y en avoir plusieurs)
         //On le positionne
         soldier.x = 250;
         soldier.y = -800;
         soldier.= -400;
         //On l'agrandit un peu
         soldier.scaleX = 4;
         soldier.scaleY = 4;
         soldier.scaleZ = 4;
         soldier.setMaterialToAllSurfaces(new VertexLightTextureMaterial(soldierTexture)); //Et enfin, on le texture avec notre ressource
         rootContainer.addChild(soldier);
         stage3D = stage.stage3Ds[0];
         stage3D.addEventListener(Event.CONTEXT3D_CREATE, onContextCreate);
         stage3D.requestContext3D();
      }
      private function onContextCreate(e:Event):void {
         for each (var resource:Resource in rootContainer.getResources(true)) {
               resource.upload(stage3D.context3D);
         }
         stage.addEventListener(Event.ENTER_FRAME, onEnterFrame);
      }
      private function onEnterFrame(e:Event):void {
         camera.view.width = stage.stageWidth;
         camera.view.height = stage.stageHeight;
         //On fait pivoter notre soldat et on oriente la lumière directionnelle sur lui
         soldier.rotationZ += 0.01;
         light.lookAt(soldier.x, soldier.y, soldier.z);
         camera.render(stage3D);
      }
   }
}

 

Résultat Obtenu

Il vous faut impérativement la version Flash Player Incubator pour voir tourner le résultat.

 



Voili voilou pour ce tutoriel sur l'import de modèle 3D.




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




  Romain Dedenis.
Partager cet article
Repost0

commentaires