J'essaie de faire pivoter un sprite en trois dimensions autour de son point central, et je me lance de comprendre une partie du comportement de matrix3d.
ive remplacé les méthodes RotationX, Rotationy et Rotationz de la Sprite comme suit: p>
override public function set rotationX (_rotationX:Number) : void { this.transform.matrix3D.prependTranslation(this.width/2.0, this.height/2.0, 0); this.transform.matrix3D.prependRotation(-this.rotationX, Vector3D.X_AXIS); this.transform.matrix3D.prependRotation(_rotationX, Vector3D.X_AXIS); this.transform.matrix3D.prependTranslation(-(this.width/2.0), -(this.height/2.0), 0); } override public function set rotationY (_rotationY:Number) : void { this.transform.matrix3D.prependTranslation(this.width/2.0, this.height/2.0, 0); this.transform.matrix3D.prependRotation(-this.rotationY, Vector3D.Y_AXIS); this.transform.matrix3D.prependRotation(_rotationY, Vector3D.Y_AXIS); this.transform.matrix3D.prependTranslation(-(this.width/2.0), -(this.height/2.0), 0); } override public function set rotationZ (_rotationZ:Number) : void { this.transform.matrix3D.prependTranslation(this.width/2.0, this.height/2.0, 0); this.transform.matrix3D.prependRotation(-this.rotationZ, Vector3D.Z_AXIS); this.transform.matrix3D.prependRotation(_rotationZ, Vector3D.Z_AXIS); this.transform.matrix3D.prependTranslation(-(this.width/2.0), -(this.height/2.0), 0); }
3 Réponses :
Je ne connais rien à propos de AS3, mais je ne sais que votre code, je me demande pourquoi vous traduisez sur l'axe z en utilisant ce que je comprends des valeurs X et Y (largeur et hauteur). L'axe z ne devrait-il pas être traduit en utilisant quelque chose comme "profondeur"? P>
Une autre solution facile consiste à ajouter l'objet et à centrer dans un sprite de conteneur et à faire les transformations 3D sur le sprite contenant. P>
yeh c'est beaucoup plus facile. Créez un holder Sprite, puis ajoutez le sprite avec x: -mysprite.width * 0.5 et Y: -MYSPRITE.Height * 0.5 puis faites pivoter le support
Ceci est très simple, vous pouvez essayer d'utiliser le code suivant: tandis que s est votre Sprite, le troisième paramètre, Le code ci-dessus rendra la sprite s faire pivoter plus -1 degements. p> p> vector3d code> indiquez la position centrale de votre Sprite . p>
La meilleure chose à faire est de vérifier UICOMPONENT # Transformaround et la mise en œuvre de AdvancedLayout.As associée. Ils font exactement cela, enveloppant matrix3d.
Ne pas regarder à travers votre code, mais êtes-vous en train de vivre à Gimbal Lock? en.wikipedia.org/wiki/gimbal_lock