Blog Papervision3D

Blog Français sur Papervision3D

Stopper le rendu d’une scène 3D.

Posté par Ocelyn le 1 octobre, 2009
Publié dans Tutoriaux

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.

  1. package {
  2.         import org.papervision3d.events.InteractiveScene3DEvent;
  3.         import org.papervision3d.materials.ColorMaterial;
  4.         import org.papervision3d.objects.DisplayObject3D;
  5.         import org.papervision3d.objects.primitives.Sphere;
  6.         import org.papervision3d.view.BasicView;
  7.  
  8.         public class BasicScene extends BasicView {
  9.                
  10.                 public function BasicScene()
  11.                 {      
  12.                         buildSphere();
  13.                         viewport.interactive = true;
  14.                 }
  15.  
  16.                 private function buildSphere() : void
  17.                 {
  18.                         do3d = new DisplayObject3D();
  19.                        
  20.                         //—
  21.                         var material : ColorMaterial = new ColorMaterial(0×000fff);
  22.                         material.interactive = true;
  23.                         sphere = new Sphere(material, 200, 20, 20);
  24.                        
  25.                         //—
  26.                         var material2 : ColorMaterial = new ColorMaterial(0xff0000);
  27.                         sphere2 = new Sphere(material2, 80, 20, 20);
  28.                         sphere2.x = 320;
  29.                        
  30.                         //—
  31.                         do3d.addChild(sphere);
  32.                         do3d.addChild(sphere2);
  33.                         scene.addChild(do3d);
  34.                        
  35.                         sphere.addEventListener(InteractiveScene3DEvent.OBJECT_CLICK, handleClick);
  36.                        
  37.                         singleRender();
  38.                 }
  39.                
  40.                 private function handleClick(event : InteractiveScene3DEvent) : void
  41.                 {
  42.                         do3d.rotationY += 10;
  43.                         singleRender();
  44.                 }
  45.                
  46.                 private var sphere : Sphere;
  47.                 private var sphere2 : Sphere;
  48.                 private var do3d : DisplayObject3D;
  49.         }
  50. }
Share and Enjoy:
  • Facebook
  • Twitter
  • LinkedIn
  • del.icio.us
  • Technorati
  • Digg
  • Netvibes
  • Wikio FR
  • Live
  • Google Bookmarks
  • email
  • Print

1 commentaire dans ce post, pour l'instant.

Suivre ce post par RSS ou poser un trackback
mygif
372. sukei dit,
1 octobre, 2009 à 10:22

Merci pour l’astuce!

Laisser un commentaire

Currently browsing Stopper le rendu d’une scène 3D.

 Pseudo(*requis)

 Email (*privée)

 Site internet (*optionnel)