как сделать 3D вращение вокруг центра в AS3 с помощью matrix3D?

Я пытаюсь повернуть Sprite в трех измерениях вокруг его centerpoint, и я изо всех сил пытаюсь понять часть поведения matrix3D.

Я переопределил набор rotationX, rotationY, и методы вращений 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 для исправления centerpoint вращения и первого prependRotation для уравновешивания любого ранее примененного вращения.

Проверение его, rotationX работы точно как ожидалось и Sprite вращается вокруг его горизонтальной оси.

rotationY и вращения также, кажется, хорошо работают. Однако существует одна проблема: каждый раз, когда rotationY или вращения установлены, все другое изменение значений вращения также. Это не проблема с rotationX - если я установил rotationX, ничто иное не изменяется. Но если я установил rotationY или вращения все изменение значений вращения, которое является проблемой для моего приложения (который пытается сохранить и восстановить значения).

Я думаю, что просто испытываю недостаток в некотором понимании о том, что продолжает matrix3D. Как я могу реализовать это, таким образом, нет никакой взаимозависимости между значениями?

8
задан Bish 14 December 2009 в 22:51
поделиться

2 ответа

Еще одно простое решение - добавить объект и центрировать его внутри спрайта-контейнера, а также выполнить 3D-преобразования на содержащем его спрайте.

3
ответ дан 6 December 2019 в 00:07
поделиться

Я ничего не знаю об AS3 и т. Д. Но просто глядя на ваш код, мне интересно, почему вы переводите по оси z, используя то, что я понимаю как значения x и y (ширина и высота). Разве не следует переводить ось Z, используя что-то вроде «глубины»?

1
ответ дан 6 December 2019 в 00:07
поделиться
Другие вопросы по тегам:

Похожие вопросы: