Accueil > > > GET_RELATIVE_MATRIX3D: LE CONCEPT...
GET_RELATIVE_MATRIX3D: LE CONCEPT...
Information sur la source
Description
Voici une source qui vous ESSAIERA de vous expliquer comment fonctionne la fonction "getRelativeMatrix3D()" de l'objet "Transform". Je dis la source, je n'expliquerais à personne le pourquoi du comment si le code et les commentaires n'était pas suffisant... Désolé. J'aide ! Je ne forme pas ! Créér un nouveau doc flash CS4 de 800x600 en 50FPS Lui attribué la classe la classe "Matrix3DExample" (Fla et AS étant dans le même dossier, il va de soit) Publier et voilà !
Source
- /*
- * hope®2009-HopeMultimedias.com[Top30]
- * http://www.hopeMultimedias.com
- */
-
- package
- {
- import flash.display.* ;
- import flash.events.* ;
- import flash.geom.* ;
- import flash.filters.* ;
-
- /**
- * @author Top30
- */
- public class Matrix3DExample
- extends Sprite
- {
- public var world :Sprite ;
- //
-
- /**
- * Constructeur
- **/
- public function Matrix3DExample()
- :void{
- // Décoration
- this.addChild( this.getBackground(0x000000,0x444444) ) ;
-
- // Container du monde 3D
- this.world= new Sprite() ;
- this.addChild( this.world ) ;
-
- // Si "z" n'est pas défini, "getRelativeMatrix3D(this.stage)" retournera null
- this.world.x= this.stage.stageWidth/2 ;
- this.world.y= this.stage.stageHeight/2 ;
- this.world.z= 0 ;
- //////////////////////////////////////////////////////////////////////////////////
-
- // Ajout de 8 cubes au sein du monde 3D
- var i :int= -1 ;
- var n :Number= Math.PI/4 ;
- while( ++i< 8 ) this.world.addChild( this.getCube( 75, Math.cos(i*n)*150, Math.sin(i*n)*150,0) );
-
- // Ecoutes
- this.stage.addEventListener( Event.ENTER_FRAME, _enterFrameHandler ) ;
- this.stage.addEventListener( MouseEvent.MOUSE_MOVE, _mouseHandler ) ;
- }
- //
-
- /**
- * Retourne un sprite "cube"
- **/
- public function getCube( size:Number, pX:Number, pY:Number, pZ :Number )
- :Sprite{
- // Le cube et sa position
- var cube :Sprite= new Sprite() ;
- cube.x= pX ; cube.y= pY ; cube.z= pZ ;
-
- // Les faces
- cube.addChild( this.getCubeFace( 0xFF0000, size, 0,-1, 0, -1, 0, 0 ) ) ;
- cube.addChild( this.getCubeFace( 0x00FF00, size, 0, 2, 0, 0, 0, 1 ) ) ;
- cube.addChild( this.getCubeFace( 0xFFFF00, size, 0, 1, 0, 1, 0, 0 ) ) ;
- cube.addChild( this.getCubeFace( 0x0000FF, size, 0, 0, 0, 0, 0,-1 ) ) ;
- cube.addChild( this.getCubeFace( 0x00FFFF, size, 1, 0, 0, 0,-1, 0 ) ) ;
- cube.addChild( this.getCubeFace( 0xFF00FF, size, 1, 0, 0, 0, 1, 0 ) ) ;
- cube.filters= [new GlowFilter(0x000000,1,25,25,1.25)] ;
-
- return cube ;
- }
- //
-
- /**
- * Retourne un sprite "face de cube"
- **/
- public function getCubeFace( color:Number, size:Number=50, rX:Number=0, rY:Number=0, rZ:Number=0, pX:Number=0, pY:Number=0, pZ:Number=0 )
- :Sprite{
- // La face
- var face :Sprite= new Sprite() ;
- face.graphics.beginFill( color, .85 ) ;
- face.graphics.drawRect( -size/2,-size/2, size,size) ;
-
- // Sa rotation
- face.rotationX= rX*90 ;
- face.rotationY= rY*90 ;
- face.rotationZ= rZ*90 ;
-
- // Sa position
- face.x= pX*(size/2) ;
- face.y= pY*(size/2) ;
- face.z= pZ*(size/2) ;
-
- return face ;
- }
-
- /**
- * Fait tourner le monde 3D
- **/
- private function _mouseHandler( e:MouseEvent )
- :void{
- var w :Number= this.world.x ; var h :Number= this.world.y ;
-
- this.world.rotationY= ((e.stageX-w)/-w)*360 ;
- this.world.rotationX= ((e.stageY-h)/-h)*360 ;
- }
- //
-
- /**
- * Calcul le Z sorting du monde 3D et ses enfants
- **/
- private function _enterFrameHandler( e:Event )
- :void{
- this.sortChild( this.world ) ;
- }
- //
-
- /**
- * Efface les enfants et les reindex selon leur "Z relatif"
- * Est autorécursive sur les enfants "DisplayObjectContainer" contenant eux aussi des enfants
- **/
- public function sortChild( parent:DisplayObjectContainer )
- :void{
- var z :Number ;
- var data :Object ;
- var list :Array= [] ;
- var matrix :Matrix3D ;
- var child :DisplayObject ;
- //
- // Pour tous les enfants de parent...
- var i :int= -1 ;
- var j :int= -1 ;
- while( ++i< parent.numChildren ){
- child= parent.getChildAt(i) ;
- //
- // On récupère la matrice global par rapport au stage...
- matrix= child.transform.getRelativeMatrix3D(this.stage) ;
-
- // Au cas où le "z" de l'enfant ne serait pas définit.
- // Evitant ainsi l'erreur du null en cas de "z" non définit...
- if( matrix!=null ) list.push( {z:matrix.position.z, child:child} ) ;
-
- // Si a des enfants "DisplayObjectContainer", on récursie
- if( child is DisplayObjectContainer ) this.sortChild( child as DisplayObjectContainer ) ;
- }
-
- // On vide le parent des enfants
- while( parent.numChildren>0 ) parent.removeChildAt(0) ;
-
- // On trie les enfants par rapport à leur "z" relatif...
- list.sortOn( "z", Array.NUMERIC|Array.DESCENDING ) ;
-
- // On remplie le parent par rapport au tri "z" précédent
- for each( data in list ) parent.addChild( data.child ) ;
- }
- //
-
- /**
- * Décoration
- **/
- public function getBackground( colUp:uint, colDown:uint )
- :Shape {
- var matrix :Matrix = new Matrix()
- matrix.createGradientBox(400, 400, Math.PI/2, 0, 0);
-
- var shape :Shape = new Shape() ;
- shape.graphics.beginGradientFill("linear", [colUp, colDown], [1, 1], [1, 255], matrix, "pad", "rgb", 0) ;
- shape.graphics.drawRect( 0, 0, 400, 400) ;
- shape.width = this.stage.stageWidth ;
- shape.height = this.stage.stageHeight ;
-
- return shape ;
- }
- }
- }
/*
* hope®2009-HopeMultimedias.com[Top30]
* http://www.hopeMultimedias.com
*/
package
{
import flash.display.* ;
import flash.events.* ;
import flash.geom.* ;
import flash.filters.* ;
/**
* @author Top30
*/
public class Matrix3DExample
extends Sprite
{
public var world :Sprite ;
//
/**
* Constructeur
**/
public function Matrix3DExample()
:void{
// Décoration
this.addChild( this.getBackground(0x000000,0x444444) ) ;
// Container du monde 3D
this.world= new Sprite() ;
this.addChild( this.world ) ;
// Si "z" n'est pas défini, "getRelativeMatrix3D(this.stage)" retournera null
this.world.x= this.stage.stageWidth/2 ;
this.world.y= this.stage.stageHeight/2 ;
this.world.z= 0 ;
//////////////////////////////////////////////////////////////////////////////////
// Ajout de 8 cubes au sein du monde 3D
var i :int= -1 ;
var n :Number= Math.PI/4 ;
while( ++i< 8 ) this.world.addChild( this.getCube( 75, Math.cos(i*n)*150, Math.sin(i*n)*150,0) );
// Ecoutes
this.stage.addEventListener( Event.ENTER_FRAME, _enterFrameHandler ) ;
this.stage.addEventListener( MouseEvent.MOUSE_MOVE, _mouseHandler ) ;
}
//
/**
* Retourne un sprite "cube"
**/
public function getCube( size:Number, pX:Number, pY:Number, pZ :Number )
:Sprite{
// Le cube et sa position
var cube :Sprite= new Sprite() ;
cube.x= pX ; cube.y= pY ; cube.z= pZ ;
// Les faces
cube.addChild( this.getCubeFace( 0xFF0000, size, 0,-1, 0, -1, 0, 0 ) ) ;
cube.addChild( this.getCubeFace( 0x00FF00, size, 0, 2, 0, 0, 0, 1 ) ) ;
cube.addChild( this.getCubeFace( 0xFFFF00, size, 0, 1, 0, 1, 0, 0 ) ) ;
cube.addChild( this.getCubeFace( 0x0000FF, size, 0, 0, 0, 0, 0,-1 ) ) ;
cube.addChild( this.getCubeFace( 0x00FFFF, size, 1, 0, 0, 0,-1, 0 ) ) ;
cube.addChild( this.getCubeFace( 0xFF00FF, size, 1, 0, 0, 0, 1, 0 ) ) ;
cube.filters= [new GlowFilter(0x000000,1,25,25,1.25)] ;
return cube ;
}
//
/**
* Retourne un sprite "face de cube"
**/
public function getCubeFace( color:Number, size:Number=50, rX:Number=0, rY:Number=0, rZ:Number=0, pX:Number=0, pY:Number=0, pZ:Number=0 )
:Sprite{
// La face
var face :Sprite= new Sprite() ;
face.graphics.beginFill( color, .85 ) ;
face.graphics.drawRect( -size/2,-size/2, size,size) ;
// Sa rotation
face.rotationX= rX*90 ;
face.rotationY= rY*90 ;
face.rotationZ= rZ*90 ;
// Sa position
face.x= pX*(size/2) ;
face.y= pY*(size/2) ;
face.z= pZ*(size/2) ;
return face ;
}
/**
* Fait tourner le monde 3D
**/
private function _mouseHandler( e:MouseEvent )
:void{
var w :Number= this.world.x ; var h :Number= this.world.y ;
this.world.rotationY= ((e.stageX-w)/-w)*360 ;
this.world.rotationX= ((e.stageY-h)/-h)*360 ;
}
//
/**
* Calcul le Z sorting du monde 3D et ses enfants
**/
private function _enterFrameHandler( e:Event )
:void{
this.sortChild( this.world ) ;
}
//
/**
* Efface les enfants et les reindex selon leur "Z relatif"
* Est autorécursive sur les enfants "DisplayObjectContainer" contenant eux aussi des enfants
**/
public function sortChild( parent:DisplayObjectContainer )
:void{
var z :Number ;
var data :Object ;
var list :Array= [] ;
var matrix :Matrix3D ;
var child :DisplayObject ;
//
// Pour tous les enfants de parent...
var i :int= -1 ;
var j :int= -1 ;
while( ++i< parent.numChildren ){
child= parent.getChildAt(i) ;
//
// On récupère la matrice global par rapport au stage...
matrix= child.transform.getRelativeMatrix3D(this.stage) ;
// Au cas où le "z" de l'enfant ne serait pas définit.
// Evitant ainsi l'erreur du null en cas de "z" non définit...
if( matrix!=null ) list.push( {z:matrix.position.z, child:child} ) ;
// Si a des enfants "DisplayObjectContainer", on récursie
if( child is DisplayObjectContainer ) this.sortChild( child as DisplayObjectContainer ) ;
}
// On vide le parent des enfants
while( parent.numChildren>0 ) parent.removeChildAt(0) ;
// On trie les enfants par rapport à leur "z" relatif...
list.sortOn( "z", Array.NUMERIC|Array.DESCENDING ) ;
// On remplie le parent par rapport au tri "z" précédent
for each( data in list ) parent.addChild( data.child ) ;
}
//
/**
* Décoration
**/
public function getBackground( colUp:uint, colDown:uint )
:Shape {
var matrix :Matrix = new Matrix()
matrix.createGradientBox(400, 400, Math.PI/2, 0, 0);
var shape :Shape = new Shape() ;
shape.graphics.beginGradientFill("linear", [colUp, colDown], [1, 1], [1, 255], matrix, "pad", "rgb", 0) ;
shape.graphics.drawRect( 0, 0, 400, 400) ;
shape.width = this.stage.stageWidth ;
shape.height = this.stage.stageHeight ;
return shape ;
}
}
}
Conclusion
La fonction "getRelativeMatrix3D()" peut être effectivement utile pour des concepts de 3D relativement basique.
Pour de la 3D plus précise, ou plus complexe, c'est vrai que des packages comm "PaperVision3D", "Always3D", "Sandy", etc... Sont bien plus perfomant.
Historique
- 21 janvier 2009 20:36:39 :
- Une simple faute !!!!!
Que c'est chiant ce systeme de justifcation de mes c...s !!!
Comme les notes et les commentaires.
= )
Sources du même auteur
Sources de la même categorie
Commentaires et avis
Discussions en rapport avec ce code source dans le forum
Matrix 3d et Rotation 3d [ par Orange73 ]
Hello, Je voulais connaitre la difference entre modifier un clip avec matrix3d ou modifier ce clip via les propriete x/y/z et rotationX/Y/Z : 1/ Mat
effet calque 3D [ par hidalg007 ]
Bonjour tout le monde... j'aimerai savoir comment peut on faire un effet flash 3D avec une photo de telle sorte qu'elle paraissent comme un calque qui
incorporer des objets 3d dans flash? [ par hemodeporc ]
Bonjour je cherche a incorporer des objets 3d venant de 3ds Max dans flash afin d en-faire des objet interactif . Est ce possible? Si oui est que quel
[ FlashCS4 / AS3 / XML ] Gestion d'une base XML et boucles ... [ par vedelvetsyn ]
Bonjour, j'ai une question pour des connaisseurs en [ FlashCS4 / AS3 / XML ]. Le but final est d'obtenir un bouton qui lorsqu'on cliquera dessus, la
Démarrage animation 3D au survol de la souris [ par midnightweb ]
Bonjour à tous, J'ai une animation 3D dans Flash CS4 : une pochette de disque qui pivote en 3D. 1. Je voudrais que cette animation démarre au survol
animation en 3D d'un objet importé de photosop!! [ par pikoloo ]
salut, je suis débutante en flash et je travaille sur flash cs4, comme première petite animation, je veux animer des objets importés de photoshop en
3d [ par anas1976gh ]
Bonjours, je travaille dans le logiciel cinema 4d j'ai fait pas mal des animation et modélisation, la question c'est comment je peut animé des objet
Probleme Perspective 3D d'un clip [ par maripaun2003 ]
Bonsoir, J'ai effectué une déformation en perspective de mon clip avec flash CS4 en utilisant ce code: clip.rotationY=-13; clip.rotationX=-6; clip.r
animation 3D [ par anticlope ]
salut à tous, Je voudrai savoir s'il y a quelqu'un qui pourrai m'expliquer la procédure pour pouvoir faire quelque chose qui ressemble à ce qui existe
MovieClip et 3D en AS3 [ par theflash518 ]
comment modifier les attributs de rotations 3D d'un MovieClip avec actionscript 3 ?? et pour quoi lorsque on fait tourner un MovieClip manuellement da
|
Derniers Blogs
[TECHDAYS2012] OUI J'Y SERAI![TECHDAYS2012] OUI J'Y SERAI! par JeremyJeanson
Bonsoir, Certes, je l'annonce avec un peu de retard, mais je serai effectivement au Techdays demain. Comme l'an dernier, je participerai au programme ATE (Ask The Expert). Si vous avez des questions Workflow, WCF, AppFabric ou plus généralement .net, n'hé...
Cliquez pour lire la suite de l'article par JeremyJeanson TFS INTEGRATION TOOLS - SUIVI DES SYNCHRONISATIONS AVEC REPORTING SERVICESTFS INTEGRATION TOOLS - SUIVI DES SYNCHRONISATIONS AVEC REPORTING SERVICES par vfabing
Afin de s'assurer du bon fonctionnement des différentes synchronisations effectuées par les TFS Integration Tools, 2 rapports sont présents dès l'installation. Il suffit alors d'effectuer les manipulations suivantes pour pouvoir les visualiser : Loca...
Cliquez pour lire la suite de l'article par vfabing CSS CONTENT STATE SELECTORS (PERSONNAL DRAFT)CSS CONTENT STATE SELECTORS (PERSONNAL DRAFT) par FREMYCOMPANY
Bonjour à tous, Je viens de publier une proposition comprenant 5 pseudo-classes pour le CSS Working Group ayant trait à l'état de chargement d'un élément (ex: IMG,VIDEO,AUDIO,OBJECT pour l'HTML.). Si le c½ur vous en dit, vous pouvez retrouver cette p...
Cliquez pour lire la suite de l'article par FREMYCOMPANY MBA : POURQUOI FAIRE ET COMMENT LE CHOISIR ?MBA : POURQUOI FAIRE ET COMMENT LE CHOISIR ? par ROMELARD Fabrice
Formation initiale Durant la formation, le découpage classique est le suivant (je donnerai les équivalences Suisse lorsque je les connaîtrais) : Ecole primaire jusqu'au Collège : Formation générale permettant d'obtenir les méthodes...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice Y'A DES ERREURS QUI PEUVENT RENDRE LE DéVELOPPEUR VIOLENTY'A DES ERREURS QUI PEUVENT RENDRE LE DéVELOPPEUR VIOLENT par Aleks
Quand on a ce genre d'erreur sans log :
Et bas on a juste envie de choper le gas de Microsoft qu'a développé ça et lui foutre des baffes de Coboye ! ...
Cliquez pour lire la suite de l'article par Aleks
Logiciels
Academy System (17.2.1.0)ACADEMY SYSTEM (17.2.1.0)Logiciel de gestion des établissements.
- élèves/étudiants (inscription, dossier, absence...)
-... Cliquez pour télécharger Academy System Easy-Planning (1.0.0.1)EASY-PLANNING (1.0.0.1)Basé sur les mêmes principes que MyPlanning, Easy-Planning permet de créer des plannings sous la ... Cliquez pour télécharger Easy-Planning COLLECTOR PLUS (3.00B)COLLECTOR PLUS (3.00B)COLLECTOR PLUS version 3.00B est un logiciel utilisant une base de données alimentée par :
- L... Cliquez pour télécharger COLLECTOR PLUS PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V7.4)PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V7.4)PONAMEDIA TV DEVIENS HELLLOOO FLASH
LA TV SUR VOTRE ORDINATEUR.
Toute une plateforme Multi... Cliquez pour télécharger PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO LettresFaciles 2011 (8.0.0.1)LETTRESFACILES 2011 (8.0.0.1)LettresFaciles est un logiciel facilitant la création et la rédaction de lettres types.
Son inte... Cliquez pour télécharger LettresFaciles 2011
|