Я пытаюсь вращать Спрайта в трех измерениях вокруг его центральной точки, и я изо всех сил пытаюсь понять некоторые особенности поведения matrix3D.
Я переопределил заданные методы вращения X, вращение Y и вращение Z в Sprite следующим образом:
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);
}
Я использую prependTranslation, чтобы исправить центральную точку вращения, и первую prependRotation, чтобы отменить любое ранее примененное вращение.
Проверяя это, вращение X работает точно так, как и ожидалось, и Sprite вращается вокруг своей горизонтальной оси.
вращение Y и вращение Z также работают нормально. Однако есть одна проблема: всякий раз, когда установлены вращение Y или вращение Z, все другие значения вращения также меняются. Это не проблема с вращением X - если я установлю вращение X, больше ничего не изменится. Но если я установлю вращение Y или вращение Z, все значения вращения изменятся, что является проблемой для моего приложения (которое пытается сохранить и восстановить значения).
Я думаю, что мне просто не хватает понимания того, что происходит с matrix3D. Как я могу реализовать это, чтобы не было взаимозависимости между значениями?