Intégration de Papervision3D dans un projet MXML

le 16 février 2008 par Mickael Ruellan

Je me suis penché sur Papervision3D dans le cadre d’un projet et j’ai voulu tester son intégration dans un projet MXML. Malheureusement, je me suis rendu compte que la plupart des tutoriels sur le sujet pour ne pas dire tous, parlent de la création d’un projet en ActionScript 3. J’ai donc créer des classes permettant l’intégration d’un objet papervision3D en tant que balise MXML, permettant ainsi d’inclure facilement une scène 3D dans un projet Flex. Je vous propose donc un petit exemple montrant l’utilisation de ces classes au sein d’un projet MXML.

Exemple disponible ici avec les sources. Les explications se trouvent dans la suite de l’article…Je me suis inspiré de ce tutoriel sur la création d’une scène générique et sur son initialisation pour créer une nouvelle classe PV3DScene.

J’ai ajouté principalement 4 choses :

  • L’extension de la classe Canvas plutot que Sprite dans les projets AS3
  • La possibilité de ne pas calculer le rendu à chaque frame avec la variable needRender et l’ajout d’une méthode invalidateScene (qui permet d’économiser pas mal de CPU dans le cas d’une scène statique !)
  • Le redimensionnement de la scène en fonction de la taille du canvas
  • La création des objets dans la scène au moyen de méthode comme add3DObject et remove3DObject et l’ajout d’un Array childrenObjects

J’ai ensuite créer une classe PV3DObject qui permet de gèrer l’interactivité des modèles importés type Collada entre autres.Le résultat c’est la possibilité de définir des objets 3D de cette manière :

public class FxCube extends PV3DObject{
public var faceWidth:Number = 500;
public var quality:Number = 20;

public function FxCube() {
super();
}

override protected function createChildren():void {
var ml:MaterialsList = new MaterialsList;
var mat:BitmapFileMaterial = new BitmapFileMaterial(’fx.jpg’);
ml.addMaterial(mat,’all’);
addChild(new Cube(ml,faceWidth,faceWidth,faceWidth,quality));}
}

Et leurs ajouts dans le composant 3D au sein d’un composant MXML de cette manière :

<mx:Panel>
<pv3d:PV3DScene id=”scene3D” width=”90%” height=”90%”>
<pv3d:childrenObjects>
<objects:FxCube faceWidth=”400″ id=”cube” />
</pv3d:childrenObjects>
</pv3d:PV3DScene>
</mx:Panel>

Les sources complètes du projet (incluant papervision3D) sont disponibles ici. A savoir qu’il est nécessaire pour la compilation de disposer des sources de Papervision.

Cette opération est décrite dans ce tutoriel, mais afin de vous simplifier la tâche, j’ai inclut dans le projet une copie de ces sources et il est juste nécessaire d’ajouter ces sources dans le Source Path du projet en faisant : Menu Project > Properties > Flex Build Path > Onglet Source Path > Add Folder… et sélectionner le dossier nommé PV3D_GreatWhite_rev428.

Un deuxième exemple sur l’utilisation d’objet au format Collada est en préparation. On verra comment ajouter un objet issu de 3DSMax dans papervision et comment interagir à la souris avec lui.

N'oubliez pas que vous pouvez vous abonner à mon Twitter http://twitter.com/flexinfo ou au flux RSS ;)

1 étoile2 étoiles3 étoiles4 étoiles5 étoiles (2 votes, 5,00 sur 5)
Loading ... Loading ...

9 Commentaires de cet article

  1. Julien Says:

    Super article, pertinent et clair :)

  2. myrddin Says:

    Oui, très bon article en effet !

  3. Albert Says:

    Article génial !
    Comment je pourrais faire pour importer un objet au format Collada avec la classe PV3DObject ?

    Encore merci pour ce très bon tutoriel

  4. florian Says:

    merc à vous pour cette image ! :)

  5. actu Says:

    merci pour ce billet, c’est toujours intéressant de vous lire. Je me demandais cependant pourquoi cette parenthèse : j’ai voulu tester son integration dans un projet mxml’ ? :)

  6. actu Says:

    merci à toi pour cett image ! :D

  7. Augustin Says:

    je ne trouve pas dans les sources le dossier : PV3D_GreatWhite_rev428
    j’ai bien un dossier com/fr/flexinfo/pv3d/

    mais c’est tout… je n’y arrive pas, qq’un can help ?

    merci

  8. Emmanuel Says:

    billet très intéressant.

    Comment peut-on récupérer un évènement de click sur un objet.

    ex : J’ai créer un nouveau type d’objet de type carte (FxCard) sur le modèle de celui du cube.
    je charge plusieurs objets sur la scène comment récépérer un événement de click sur un objet. Pour par exemple zoomer sur cet objet.

  9. Julien Lestel Says:

    Salut Mickael, même les américains parlent de toi avec cet article !!!

1 Trackbacks de cet artice

  1. DAY 10 : PAPERVISION + ADOBE AIR FUN Says:

    [...] to Mickael Ruellan who made the papervision/flex bridge [...]

Rédiger un commentaire

Subscriptions

Sondage

Préférez-vous travailler avec l'ancien Flex Builder ou le nouveau Flash Builder ?

  • Flex Builder (50,0%, 8 Votes)
  • Flash Builder (31,0%, 5 Votes)
  • Aucun des 2 ! (19,0%, 3 Votes)

Nombre de votants: 16

Loading ... Loading ...

Twitter

Mugsho