Blog Papervision3D

Blog Français sur Papervision3D

Coordonnées 2D du sommet haut gauche d’une Plane.

Posté par Ocelyn le 13 novembre, 2009
Publié dans Tutoriaux

Suite à l’article sur comment obtenir les coordonnées 2D du centre d’une Plane, je vous présente ici une astuce pour trouver les coordonnées 2D du somment haut gauche d’une Plane (comme si ce n’était qu’un simple MovieClip aligné en 0,0)

Cet article implique donc que vous ayez lu le précédent article, afin d’aller directement à l’essentiel :)

Tout d’abord, nous créons un DisplayObject3D (ligne 23), auquel nous ajoutons une Plane.

Comme vous le voyez (ligne 25) notre Plane fait 80 pixels par 80 pixels, pour pouvoir centrer en 0,0 notre plane dans notre DisplayObject3D.

Nous la déplaçons en x de la moitié de sa largeur (ligne 27) et en y (ligne 28) de -(sa hauteur divisé par deux).

Enfin nous activons le autoCalcScreenCoords non pas sur la Plane mais sur le DisplayObject3D (ligne 33).

Tout ceci nous permet avec la même formule que dans l’exemple précédent, de pouvoir positionner notre Sprite sur le sommet haut gauche de notre Plane.

  1. package{
  2. import org.papervision3d.materials.ColorMaterial;
  3. import org.papervision3d.objects.DisplayObject3D;
  4. import org.papervision3d.objects.primitives.Plane;
  5. import org.papervision3d.view.BasicView;
  6.  
  7. import flash.display.Sprite;
  8. import flash.events.Event;
  9.  
  10. public class BasicScene extends BasicView {
  11.  
  12. public function BasicScene()
  13. {
  14. topLeftPlane();
  15.  
  16. startRendering();
  17. }
  18.  
  19. private function topLeftPlane() : void
  20. {
  21. var mt : ColorMaterial = new ColorMaterial(0x0000ff);
  22.  
  23. do3d = new DisplayObject3D();
  24.  
  25. var tlPlane : Plane = new Plane(mt, 80, 80);
  26. do3d.addChild(tlPlane);
  27. tlPlane.x = 40;
  28. tlPlane.y = -40;
  29.  
  30. scene.addChild(do3d);
  31. do3d.z = ( camera.zoom * camera.focus )Math.abs (camera.z);
  32.  
  33. do3d.autoCalcScreenCoords = true;
  34.  
  35. //—-
  36.  
  37. topLeftSprite = new Sprite();
  38. topLeftSprite.graphics.beginFill(0xff0000, 0.2);
  39. topLeftSprite.graphics.drawRect(0, 0, 40, 40);
  40. addChild(topLeftSprite);
  41. }
  42.  
  43. override protected function onRenderTick(event:Event=null):void
  44. {
  45. do3d.x -= 0.2;
  46. do3d.y -= 0.2;
  47.  
  48. topLeftSprite.x = ( do3d.screen.x + (this.width / 2 ) );
  49. topLeftSprite.y = ( do3d.screen.y + (this.height / 2 ) );
  50.  
  51. //—-
  52.  
  53. super.onRenderTick(event);
  54. }
  55.  
  56. private var do3d             : DisplayObject3D;
  57.  
  58. private var topLeftSprite     : Sprite;
  59. }
  60. }
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
473. Jack dit,
7 mai, 2010 à 1:21

Bonjour Ocelyn,

Je suis votre site depuis quelques temps, et j’en viens à utiliser l’autoCalcScreenCoords. Cela fonctionne à merveille, excepté sur deux points :

- la synchro dans le temps n’est pas parfaite (est-ce du a l’approximation de la 3d ou au manque de fps ?)
- lorsque la caméra tourne le dos a la plane, la plane est considérée comme X = 0, c’est à dire… que le sprite collé sur ces coordonnées est face à la caméra…

Connaissez vous une astuce ?

Laisser un commentaire

Currently browsing Coordonnées 2D du sommet haut gauche d’une Plane.

 Pseudo(*requis)

 Email (*privée)

 Site internet (*optionnel)