Posté par Ocelyn le 13 octobre, 2009 |
Pas de commentaire
Salut à tous,
Voici une astuce qui vous permettra de mesurer les performances de vos scène sous Papervision3D grâce à classe StatsView de Papervision.
J’ai repris le code de la leçon précédente en y ajoutant une fonction initStats (ligne 14), à l’intérieur de laquelle je créé un objets Statsview (ligne 20) et auquel je passe le BasicRenderEngine de la classe BasicView (renderer).
Il ne me reste plus qu’à l’addChilder sur ma scène (ligne 21).
Vous verrez apparaitre un carré noir contenant les différentes stats en haut à gauche de votre scène, les stats FPS (Nombres d’image par seconde), Mem (Mémoire utilisé par le flash player) vous permettront de voir rapidement les performances de vos applications, à noter que si vous avez d’autres sites ou applications flash lancée en même temps, la mémoire prendra en compte ces derniers.
-
package {
-
import org.papervision3d.materials.special.Letter3DMaterial;
-
import org.papervision3d.typography.Text3D;
-
import org.papervision3d.typography.fonts.HelveticaBold;
-
import org.papervision3d.view.BasicView;
-
import org.papervision3d.view.stats.StatsView;
-
-
import flash.events.Event;
-
-
public class BasicScene extends BasicView {
-
-
public function BasicScene()
-
{
-
initStats();
-
buildLetters();
-
}
-
-
private function initStats() : void
-
{
-
var sv : StatsView = new StatsView(renderer);
-
addChild(sv);
-
}
-
-
private function buildLetters() : void
-
{
-
var font : HelveticaBold = new HelveticaBold();
-
-
var material : Letter3DMaterial = new Letter3DMaterial(0xff00ff);
-
material.doubleSided = true;
-
-
txt3d = new Text3D("Blog Papervision3D", font, material);
-
-
scene.addChild(txt3d);
-
-
startRendering();
-
}
-
-
override protected function onRenderTick(event:Event=null):void
-
{
-
txt3d.rotationY++;
-
super.onRenderTick(event);
-
}
-
-
private var txt3d : Text3D;
-
}
-
}
Posté par Ocelyn le 2 octobre, 2009 |
Pas de commentaire
Papervision3D nous offre la possibilité de créer des textes 3D, ceci en trois étapes.
Dans un premier temps nous allons créer notre Font, la police de caractère que nous allons appliquer à notre Text3D, il en existe 4 déjà définis dans Pv3d : HelveticaBold, HelveticaLight, HelveticaMedium et HelveticaRoman.
Nous créons donc notre font (ligne 18), puis notre Letter3DMaterial auquel nous passons une couleur et lui appliquons la propriété doubleSided (ligne 20 et 21).
Enfin nous créons notre Text3D (ligne 23), nous lui passons une chaine de caractère qui sera le texte affiché en 3D, notre font et notre material créés précédemment.
Si nous souhaitons changer le texte, il suffit simplement de faire txt3d.text = « Ma nouvelle chaine de caractère »; ou txt3d.text = txt3d.text + « -fr »; pour afficher Blog Papervision3D-fr.
-
package {
-
import org.papervision3d.materials.special.Letter3DMaterial;
-
import org.papervision3d.typography.Text3D;
-
import org.papervision3d.typography.fonts.HelveticaBold;
-
import org.papervision3d.view.BasicView;
-
-
import flash.events.Event;
-
-
public class BasicScene extends BasicView {
-
-
public function BasicScene()
-
{
-
buildLetters();
-
}
-
-
private function buildLetters() : void
-
{
-
var font : HelveticaBold = new HelveticaBold();
-
-
var material : Letter3DMaterial = new Letter3DMaterial(0xff00ff);
-
material.doubleSided = true;
-
-
txt3d = new Text3D("Blog Papervision3D", font, material);
-
-
scene.addChild(txt3d);
-
-
startRendering();
-
}
-
-
override protected function onRenderTick(event:Event=null):void
-
{
-
txt3d.rotationY++;
-
super.onRenderTick(event);
-
}
-
-
private var txt3d : Text3D;
-
}
-
}
Posté par Ocelyn le 1 octobre, 2009 |
1 commentaire
Un tutoriel très court mais qui concerne un point crucial sur Pv3d, la gestion de la mémoire.
La manière la plus efficace pour ne pas gaspiller vos ressources dans une scène 3D, est de stopper le rendu de votre scène, quand vous n’avez plus aucune animation à afficher.
Pour cela, deux solutions :
Dans le cas où vous avez créé votre scène 3D grâce à un BasicView ou ReflectionView et avez lancé un startRendering() pour afficher vos objets et animations, il vous suffit simplement de faire appel à la fonction stopRendering(); (ligne 43) pour stopper le rendu et refaire un startRendering(); pour le reprendre.
Si vous avez créé votre scène 3D par vous même il vous suffira de supprimer votre EnterFrame qui vous sert au rendu pour stopper le rendu et de le recréer pour le reprendre.
A noter que même si le rendu est stoppé, les interactions avec les objets 3D sont toujours actifs, dans l’exemple ci-dessous, nous créons nos objets 3D et ne lançons qu’un seul rendu pour les afficher n’ayant pas d’animation.
Puis au clique sur notre Sphere, nous appliquons une rotationY à notre DisplayObject3D (ligne 42), et relançons un rendu pour afficher cette modification (ligne 43), très utile pour des Roll Over par exemple.
-
package {
-
import org.papervision3d.events.InteractiveScene3DEvent;
-
import org.papervision3d.materials.ColorMaterial;
-
import org.papervision3d.objects.DisplayObject3D;
-
import org.papervision3d.objects.primitives.Sphere;
-
import org.papervision3d.view.BasicView;
-
-
public class BasicScene extends BasicView {
-
-
public function BasicScene()
-
{
-
buildSphere();
-
viewport.interactive = true;
-
}
-
-
private function buildSphere() : void
-
{
-
do3d = new DisplayObject3D();
-
-
//—
-
var material : ColorMaterial = new ColorMaterial(0×000fff);
-
material.interactive = true;
-
sphere = new Sphere(material, 200, 20, 20);
-
-
//—
-
var material2 : ColorMaterial = new ColorMaterial(0xff0000);
-
sphere2 = new Sphere(material2, 80, 20, 20);
-
sphere2.x = 320;
-
-
//—
-
do3d.addChild(sphere);
-
do3d.addChild(sphere2);
-
scene.addChild(do3d);
-
-
sphere.addEventListener(InteractiveScene3DEvent.OBJECT_CLICK, handleClick);
-
-
singleRender();
-
}
-
-
private function handleClick(event : InteractiveScene3DEvent) : void
-
{
-
do3d.rotationY += 10;
-
singleRender();
-
}
-
-
private var sphere : Sphere;
-
private var sphere2 : Sphere;
-
private var do3d : DisplayObject3D;
-
}
-
}
Posté par Ocelyn le 29 septembre, 2009 |
2 commentaires
Dans ce tutoriel nous allons créer un effets de brouillards dans Papervision3D.
Pour cela nous allons tout simplement utiliser un FogMaterial et un FogFilter que nous appliquerons à notre BasicRenderEngine (renderer).
Nous créons notre FogMaterial (ligne 20) et lui passons une couleur, le mieux est de choisir une couleur étant la même que votre couleur de fond. (blanc dans cet exemple)
Puis nous appliquons à notre renderer un nouveau filtre (ligne 21), un FogFilter qui reçoit 4 paramètres, le premier est notre FogMaterial créé précédemment puis le nombre de segments, c’est à dire le nombre de layers entre un fog à 0% et un fog à 100%, plus il y a de segments plus la progression vers le fond du brouillards seras détaillées.
Enfin nous lui passons les paramètres minDepth et maxDepth qui sont les points de départs et d’arrivé en Z de notre Fog.
Enfin nous faisons avancer notre Sphere en Z (ligne 37) pour la voir s’enfoncer progressivement dans le brouillard.
-
package {
-
import org.papervision3d.core.render.filter.FogFilter;
-
import org.papervision3d.materials.ColorMaterial;
-
import org.papervision3d.materials.special.FogMaterial;
-
import org.papervision3d.objects.primitives.Sphere;
-
import org.papervision3d.view.BasicView;
-
-
import flash.events.Event;
-
-
public class BasicScene extends BasicView {
-
-
public function BasicScene()
-
{
-
initFog();
-
buildSphere();
-
}
-
-
private function initFog() : void
-
{
-
var fogMaterial : FogMaterial = new FogMaterial(0xffffff);
-
renderer.filter = new FogFilter(fogMaterial, 50, 1500, 2000);
-
}
-
-
private function buildSphere() : void
-
{
-
var material : ColorMaterial = new ColorMaterial(0×000000);
-
material.smooth = true;
-
-
sphere = new Sphere(material, 200, 20, 20);
-
scene.addChild(sphere);
-
-
startRendering();
-
}
-
-
override protected function onRenderTick(event:Event=null):void
-
{
-
sphere.z += 5;
-
super.onRenderTick(event);
-
}
-
-
private var sphere : Sphere;
-
}
-
}
Posté par Ocelyn le 24 septembre, 2009 |
2 commentaires
Dans notre précédent tutoriel, nous avons vu comment texturer un objets 3D, pour afficher des effets d’ombres sur ces derniers.
Pour aller plus loin que ce dernier qui nous permettait seulement de faire une texture avec un dégradé entre deux couleurs, nous allons voir comment afficher une ombre sur une texture image.
Pour cela nous allons utiliser un BitmapMaterial (ligne 44) dont nous avions déjà parlé dans ce tutoriel, un PhongShader (ligne 45)qui va être le material qui affichera notre ombre, comme le PhongMaterial vu dans le tutoriel précédent, il reçoit notre objet lumière, la couleur de la lumière, la couleur de l’ombre, et le specularLevel.
Après avoir créé ces deux textures, il nous reste à créer un ShadedMaterial (ligne 47) dans lequel nous passerons les deux materials précédent, et que nous utiliserons comme texture pour notre Sphere.
-
package {
-
import org.papervision3d.lights.PointLight3D;
-
import org.papervision3d.materials.BitmapMaterial;
-
import org.papervision3d.materials.shaders.PhongShader;
-
import org.papervision3d.materials.shaders.ShadedMaterial;
-
import org.papervision3d.objects.primitives.Sphere;
-
import org.papervision3d.view.BasicView;
-
-
import flash.display.BitmapData;
-
import flash.display.Loader;
-
import flash.events.Event;
-
import flash.net.URLRequest;
-
-
public class BasicScene extends BasicView {
-
-
public function BasicScene()
-
{
-
initMaterial();
-
}
-
-
private function initMaterial() : void
-
{
-
myLoader = new Loader();
-
myLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, onLoadComplete);
-
myLoader.load(new URLRequest("URL IMAGE"));
-
}
-
-
private function onLoadComplete(event : Event) : void
-
{
-
myLoader.contentLoaderInfo.removeEventListener(Event.COMPLETE, onLoadComplete);
-
-
bmpData = new BitmapData(myLoader.width, myLoader.height);
-
-
bmpData.draw(myLoader);
-
-
buildPlane();
-
}
-
-
private function buildPlane() : void
-
{
-
var light : PointLight3D = new PointLight3D();
-
scene.addChild(light);
-
-
var material : BitmapMaterial = new BitmapMaterial(bmpData);
-
var ps : PhongShader = new PhongShader(light, 0xffffff, 0×000000, 10);
-
-
var shadeMaterial : ShadedMaterial = new ShadedMaterial(material, ps);
-
shadeMaterial.doubleSided = true;
-
-
sphere = new Sphere(shadeMaterial, 200, 12, 12);
-
scene.addChild(sphere);
-
-
startRendering();
-
}
-
-
override protected function onRenderTick(event:Event=null):void
-
{
-
sphere.rotationY += 3;
-
super.onRenderTick(event);
-
}
-
-
private var sphere : Sphere;
-
private var myLoader : Loader;
-
private var bmpData : BitmapData;
-
}
-
}