2011-12-22 40 views
7

Tôi có một Quaternion đại diện cho vòng quay của một nhân vật 3D trên cánh tay. Tôi cũng có một dòng được cho là đại diện cho vị trí mới của cánh tay của nhân vật đó. Vị trí đường thẳng đó được cho bởi hai điểm 3D.Hướng vector từ Quaternion?

Đây là dữ liệu duy nhất tôi có và Im đang cố gọi một phương thức trong gói 3D (Digital Rune) lấy 2 vector hướng và trả về Quaternion biểu diễn vòng xoay cần thiết để di chuyển cánh tay đến vị trí mới.

Vấn đề là tôi thấy một số hành vi kỳ lạ, như thể các trục được trộn lẫn và nó thường không hoạt động. Ngoài ra, đối tượng Quaternion (mà là từ gói 3D) đại diện cho cánh tay kẻ 3D có W, X, Y và Z. Do X, Y và Z đại diện cho vector hướng? Bởi vì đó là những gì tôi cần để gọi chức năng đúng cách. Tôi đã sử dụng điều này cùng với vector hướng tính toán của tôi từ các điểm cuối của đường dây của tôi, nhưng như tôi đã nói nó có vẻ buồn cười.

Nếu X, Y và Z không phải là véc tơ hướng, làm thế nào để chuyển đổi từ một Quaternion thành hai điểm cuối để tôi có thể tính toán vector hướng?

+2

điều này có thể hữu ích http://stackoverflow.com/q/1171849/10468 và http://stackoverflow.com/q/2646121/10468 này – DarenW

Trả lời

7

Trong ngữ cảnh của bạn (và trong hầu hết ngữ cảnh đồ họa máy tính), quaternion is used to represent a rotation. Bạn không muốn sử dụng X, Y và Z trực tiếp; thay vào đó (như được mô tả trong hướng dẫn được liên kết ở trên), bạn sử dụng nó để tạo ra một rotation matrix. Sau đó, bạn nên sử dụng ma trận xoay vòng giống như bất kỳ ma trận nào khác 3D transformation matrix; nó sẽ xoay các điểm xung quanh nguồn gốc như được mô tả bởi quaternion nó xuất phát.

X, Y và Z của quaternion đại diện cho trục quay, nhưng quaternion cũng mã hóa cường độ quay, theo cách không đặc biệt đơn giản. Nếu gói của bạn bao gồm các hàm trả về một quaternion, nó cũng nên bao gồm các hàm biến quaternions thành các ma trận quay; bạn nên sử dụng hàm đóng gói nếu có thể (vì nó phải sử dụng các quy ước giống như phương thức tạo ra chúng).

Sau khi đọc lên quaternion và ma trận chuyển đổi, bạn nên đọc lại tài liệu của hàm trong câu hỏi cẩn thận, để đảm bảo bạn đang cung cấp đúng loại đối số và đảm bảo rằng bạn đang sử dụng kết quả đúng cách (thật dễ dàng để vặn nó lên, ngay cả khi bạn đã quen thuộc với toán học ...).

Các vấn đề liên quan