Tôi đã theo một hướng dẫn XNA bởi The Hazy Mind Tôi có một đối tượng cơ bản có một Vị trí (Vector3) và một Xoay (Quaternion). Mô hình đối tượng trông như thế này Xoay 6 mặt của một khối
Từ việc thực hiện máy ảnh trong hướng dẫn này, tôi đã thực hiện một bản sao của Rotation và Revolve phương pháp và thực hiện chúng trên Object
public virtual void Rotate(Vector3 axis, float angle)
{
axis = Vector3.Transform(axis, Matrix.CreateFromQuaternion(Rotation));
Rotation = Quaternion.Normalize(Quaternion.CreateFromAxisAngle(axis, angle) * Rotation);
}
public virtual void Revolve(Vector3 target, Vector3 axis, float angle)
{
Vector3 revolveAxis = Vector3.Transform(axis, Matrix.CreateFromQuaternion(Rotation));
Quaternion rotate = Quaternion.Normalize(Quaternion.CreateFromAxisAngle(revolveAxis, angle));
Position = Vector3.Transform(Position - target, Matrix.CreateFromQuaternion(rotate)) + target;
Rotate(axis, angle);
}
đối tượng Lô My tạo 6 trường hợp của Quad và gọi phương thức render trên từng đối tượng Quad, tôi có offsets và quay được gán trên mỗi Quad để tạo thành một khối kết cấu trông như thế này:
và bây giờ chúng tôi có vấn đề thực tế, gọi Xoay trên khối của tôi obj ect làm cho đối tượng tự thay đổi xoay, và đối tượng Quad của tôi không xoay, do đó tôi đã thực hiện một chức năng Rotate mới trên đối tượng Block của tôi.
public override void Rotate(Vector3 axis, float angle)
{
for (int i = 0; i < mySides.Length; i++)
{
Quad side = mySides[i];
side.Revolve(this.Position, axis, angle);
}
}
Tuy nhiên điều này đã không cho tôi kết quả dự kiến như đã thấy ở đây:
Các giải pháp sai
Các giải pháp sau đây sẽ làm việc nhưng sẽ không thể rất chung chung và sẽ bị giới hạn: Một loạt các câu lệnh if kiểm tra xem trục nào tôi muốn xoay quanh và sau đó quay mọi cạnh (đối tượng Quad) theo cách chính xác.
Các giải pháp thích hợp
Ngoài ra tôi có thể làm cho rendering của Quad đối tượng phụ thuộc vào Rotation của đối tượng Block (cha mẹ), nhưng tôi không chắc chắn về cách để làm điều này.
Tùy chọn thứ ba và cuối cùng là có phương pháp xoay cập nhật từng xoay vòng đối tượng Quad và vị trí với giá trị chính xác, điều này tôi không chắc chắn về cách thực hiện.
Các Câu hỏi
Vì vậy, những gì tôi đang yêu cầu là một số ý tưởng hay suy nghĩ về vấn đề này, có lẽ một số liên kết và/hoặc hướng dẫn giải thích làm thế nào để sử dụng Quaternions trong XNA, tốt nhất trong một cách trực quan.
Chúc mừng, mong muốn được đầu vào của bạn :)