Nous allons voir comment ajouter un magnifique effet de flamme sur vos objets 3D.
Tout d’abords, nous allons chercher une texture pour notre objets 3D qui sera la planète Terre, vous pouvez en trouver ici, la carte de la Terre sera parfaite pour notre exemple, faites attention à en choisir une qui ne soit pas trop grande ou réduire la taille de votre image dans votre logiciel de retouche d’image favoris, une trop grande image réduirait fortement les performances de notre application.
Pour réaliser notre effets de feu sur notre objets nous allons utiliser un BitmapEffectLayer et lui ajouter un BitmapFireEffect.
Nous avons besoin d’une texture Bitmap pour que notre effet fonctionne, la première étape est donc de chargé l’image qui nous servira de texture (ligne 25 à 27), faites attention à passer le bon lien vers votre image, pour mon cas elle se trouve à cette adresse « assets/earth.jpg » (ligne 27)
L’image chargée par notre flash, nous l’ajoutons dans un objet BitmapData (ligne 34-35).
Nous créons notre BitmapEffectLayer auquel nous passons notre Viewport (ligne 45) et nous créons notre BitmapMaterial auquel nous affectons notre objet BitmapData précédent (ligne 47).
Enfin nous créons, notre BitmapFireEffect (ligne 54), et affectons ce dernier à notre BitmapEffectLayer créé précédemment (ligne 55).
Nous pouvons enfin nous amuser avec les propriétés de notre BitmapFireEffect (ligne 56-57), tel qu’activer la propriété blueFlame pour rendre le feu bleu (qui rend très bien sur notre pauvre planète), changer la valeur de la propriété flameHeight pour changer la taille du feu.. Je vous laisse regarder les différentes propriété que nous pouvons modifier pour personnaliser votre flamme.
Enfin il nous reste à ajouter notre Sphere au BitmapEffectLayer (ligne 59) et ajouter le BitmapEffectLayer à notre Viewport (ligne 61).
-
package {
-
import org.papervision3d.core.effects.BitmapFireEffect;
-
import org.papervision3d.materials.BitmapMaterial;
-
import org.papervision3d.objects.primitives.Sphere;
-
import org.papervision3d.view.BasicView;
-
import org.papervision3d.view.layer.BitmapEffectLayer;
-
-
import flash.display.BitmapData;
-
import flash.display.Loader;
-
import flash.events.Event;
-
import flash.net.URLRequest;
-
-
public class FireBall extends BasicView
-
{
-
-
public function FireBall(){
-
loadingImage();
-
}
-
-
//_______________________________________________________________
-
// L O A D I N G
-
-
private function loadingImage() : void
-
{
-
myLoader = new Loader();
-
myLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, onLoadComplete);
-
myLoader.load(new URLRequest("assets/earth.jpg"));
-
}
-
-
private function onLoadComplete(event : Event) : void
-
{
-
myLoader.contentLoaderInfo.removeEventListener(Event.COMPLETE, onLoadComplete);
-
-
bmpData = new BitmapData(myLoader.width, myLoader.height);
-
bmpData.draw(myLoader);
-
-
buildFireball();
-
}
-
-
//_______________________________________________________________
-
// F I R E B A L L
-
-
private function buildFireball() : void
-
{
-
var bitmapEffectLayer:BitmapEffectLayer = new BitmapEffectLayer(viewport);
-
-
var material:BitmapMaterial = new BitmapMaterial(bmpData);
-
-
sphere = new Sphere(material, 100, 10, 10);
-
scene.addChild(sphere);
-
-
sphere.z = ( camera.zoom * camera.focus ) – Math.abs( camera.z );
-
-
var bitmapFireEffect : BitmapFireEffect = new BitmapFireEffect();
-
bitmapEffectLayer.addEffect(bitmapFireEffect);
-
bitmapFireEffect.blueFlame = true;
-
bitmapFireEffect.flameHeight = 1;
-
-
bitmapEffectLayer.addDisplayObject3D(sphere);
-
-
viewport.containerSprite.addLayer(bitmapEffectLayer);
-
-
startRendering();
-
}
-
-
override protected function onRenderTick(event:Event=null):void
-
{
-
sphere.rotationY ++;
-
super.onRenderTick(event);
-
}
-
-
//_______________________________________________________________
-
// V A R I A B L E S
-
-
private var myLoader : Loader;
-
private var bmpData : BitmapData;
-
-
private var sphere : Sphere;
-
}
-
}



