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
3D Polygonale et JPGs externes [ par BlackEagle ]
Salut,- J'ai fait une petite anim grâce à la source de Dean de 3D Polygonale, mais j'aimerais savoir s'il est possible de changer la couleur des arrêt
sur quel site pourrai-je trouver des boutons 3d flash ? [ par martinkk ]
je viens de decouvrir flash et je voudrais utiliser des boutons 3d flash pour embellir mes formulaires.sur quels sites se trouvent les meilleurs bouto
swift 3d [ par flashman007 ]
hugo the best now and foreverkelkun sait ou on peut telecharger des logiciels permettant l'importation d'objets 3d dans flash??
video et scene 3d ?? [ par flashx ]
flashxvoila jaimerais mettre une scene video en numerique ds une scene 3d pur et dur je sais pas si vous comprenne !donc je voudrais insere un couple
effet 3D > un clip qui tourne sur lui-même [ par inconnue ]
Salut, j'aimerai connaître l'action script pour faire tourner un clip sur lui-même à 360°.1 - sur son axe vertical (>1°clip) 2 - sur son axe ho
KKun peut il me dire ou trouver des tutoriaux sur swift 3D ? [ par tipie ]
Salut a tous kkun peut me dire si il y a des tutos sur swift 3d ou alors livre ou magazine ? merci d'avance.
Swift 3d ? [ par tipie ]
Bonjour,j'ai un probleme avec swift 3D, je vois que l'on peut importer du AI ou du EPS mais je n'arrive pas a importer un fichier vectorielle que j'ai
|
Derniers Blogs
[DESIGN PATTERNS] PARTIE 2: DIP: DEPENDENCY INVERSION PRINCIPLE[DESIGN PATTERNS] PARTIE 2: DIP: DEPENDENCY INVERSION PRINCIPLE par tja
C'est le dernier principe des principes du Design Orienté Objet (The Principles of Object Oriented Design) fondés par Robert C. Martin plus connu sous le pseudonyme d'Uncle Bob.
l'image empruntée de LosTechies.
Je ne traite pas les principes dans...
Cliquez pour lire la suite de l'article par tja TECHDAYS PARIS 2010 : SHAREPOINT 2010 POUR LES DéVELOPPEURSTECHDAYS PARIS 2010 : SHAREPOINT 2010 POUR LES DéVELOPPEURS par ROMELARD Fabrice
Animé par: Laurent Cotton Le développement dans SharePoint 2010 passe par plusieurs axes qui seront évoqués dans cette session, mais plus particulièrement les développements simples lié au besoin Business Business Connectivity Services Ce BCS es...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice TECHDAYS PARIS 2010 : PLEINIèRE DERNIER JOURTECHDAYS PARIS 2010 : PLEINIèRE DERNIER JOUR par ROMELARD Fabrice
Cette session est la dernière pleinière de ces 3 jours de TechDays Paris 2010. Généralement, cette troisième journée est plus axée sur l'avenir vu par Microsoft. Après un retour sur l'avenir vu par la Science Fiction ou par ...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice UNE JOLIE-HORLOGE ET PAS QU'UN PEU !UNE JOLIE-HORLOGE ET PAS QU'UN PEU ! par neodante
Pour les possesseurs d'iPhone, ça y est Bijin Tokei - qui se traduit littéralement en Français par " Jolie Horloge " - est arrivé et GRATUITEMENT s'il vous plaît ! Après la version Tokyo, Hokkaido, night club, racing, Gal, "pour les mademoiselles'", . voi...
Cliquez pour lire la suite de l'article par neodante TECHDAYS PARIS 2010 : CONNECTEZ VOS DONNéES à SHAREPOINT 2010 AVEC LES BUSINESS CONNECTIVITY SERVICESTECHDAYS PARIS 2010 : CONNECTEZ VOS DONNéES à SHAREPOINT 2010 AVEC LES BUSINESS CONNECTIVITY SERVICES par ROMELARD Fabrice
Animé par: Gaetan Bouveret et Julien Chomarat Business Connectivity Services (BCS) est dans SharePoint 2010 la version 2 de Business Data Catalog (BDC dans SharePoint 2007). Il s'agit de la solution permettant de visualiser des données provenan...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice
Logiciels
DB-MAIN (9.1.0)DB-MAIN (9.1.0)DB-MAIN is a data-modeling and data-architecture tool. It is designed to help developers and anal... Cliquez pour télécharger DB-MAIN Xilisoft DPG Convertisseur (5.1.37.0120)XILISOFT DPG CONVERTISSEUR (5.1.37.0120)Xilisoft DPG Convertisseur offre aux fans de Nintendo DS une bonne solution leur permettant de dé... Cliquez pour télécharger Xilisoft DPG Convertisseur GraphicsGale (2.01.01)GRAPHICSGALE (2.01.01)GraphicsGale est un logiciel de PixelArt avec de nombreuse fonctionnalités permettant de réalisé ... Cliquez pour télécharger GraphicsGale Architecte 3D (Platinum 2010)ARCHITECTE 3D (PLATINUM 2010)Architecte 3D Platinium vous permet de concevoir facilement les plans votre future maison, de l'é... Cliquez pour télécharger Architecte 3D TeamViewer 5 (TeamViewer 5)TEAMVIEWER 5 (TEAMVIEWER 5)Dépanner un ami,expliquer une manipulation devient un jeu d'enfant.
Prise en main d'un autre ord... Cliquez pour télécharger TeamViewer 5
Comparez les prix

HTC Magic
Entre 429€ et 429€
|