Tôi đang cố gắng xoay một Sprite theo ba chiều xung quanh điểm giữa của nó, và tôi đang đấu tranh để hiểu một số hành vi của matrix3D.làm thế nào để làm xoay vòng 3D xung quanh trung tâm trong AS3 sử dụng matrix3D?
Ive ghi đè các thiết lập phương pháp rotationX, rotationY, và rotationZ của Sprite như sau:
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);
}
Tôi đang sử dụng prependTranslation để sửa như trung tâm của vòng quay, và prependRotation đầu tiên để hủy bỏ ra bất kỳ previously- áp dụng xoay.
Thử nghiệm nó ra, rotationX hoạt động chính xác như mong đợi và Sprite xoay quanh trục ngang của nó.
rotationY and rotationZ cũng có vẻ hoạt động tốt. Tuy nhiên, có một vấn đề: bất cứ khi nào rotationY hoặc rotationZ được thiết lập, tất cả các giá trị luân phiên khác cũng thay đổi. Đây không phải là vấn đề với rotationX - nếu tôi đặt rotationX, không có gì khác thay đổi. Nhưng nếu tôi đặt rotationY hoặc rotationZ thì tất cả các giá trị xoay sẽ thay đổi, đây là một vấn đề đối với ứng dụng của tôi (đó là cố gắng lưu và khôi phục các giá trị).
Tôi nghĩ rằng tôi chỉ thiếu một số hiểu biết về những gì đang xảy ra với matrix3D. Làm thế nào tôi có thể thực hiện điều này để không có sự phụ thuộc lẫn nhau giữa các giá trị?
điều tốt nhất là kiểm tra [UIComponent # transformAround] (http://opensource.adobe.com/svn/opensource/flex/sdk/trunk/frameworks/projects/framework/src/mx/core/UIComponent.as) và triển khai AdvancedLayout.as có liên quan. Họ làm chính xác điều đó, gói Matrix3D. –
Không tìm kiếm thông qua mã của bạn, nhưng bạn có đang sử dụng Khóa Gimbal không? http://en.wikipedia.org/wiki/Gimbal_lock –