2010-05-06 46 views
9

Tôi có một vector hướng áp dụng cho một vị trí cho tôi điểm mà máy ảnh sẽ nhìn. Làm thế nào tôi có thể nhận được từ đó yaw, pitch và roll để sử dụng glRotatef đúng cách?Cách lấy Yaw, Pitch và Roll từ một vector 3D

Cảm ơn trước

Trả lời

7

Có thể bạn không thực sự muốn làm ngáp, chao và cuộn. Bạn chỉ cần chuyển đổi chính xác. Hãy thử sử dụng gluLookAt để xây dựng nó. Documentation.

+0

Cảm ơn bạn đã gợi ý. Tôi chỉ mới bắt đầu sử dụng OpenGL và tôi không biết về chức năng này. Tôi đã giải quyết bằng cách sử dụng này. – Jack

+0

Đây là một câu trả lời hay, nhưng chỉ thực tế cho một tập hợp con của các nền tảng phổ biến cung cấp GLU (ví dụ không nhất thiết phải là nền tảng OpenGL ES) – jheriko

14

Bạn không thể nhận yaw, pitch và cuộn từ một vector hướng là vectơ chỉ đạo sẽ chỉ nói hướng nào để tìm trong (yaw và pitch)

Để có được yaw và nốt nhạc mà bạn sử dụng lượng giác - Tôi giả sử bạn có một số kiến ​​thức làm việc. Hãy xem this wiki page để biết một số biểu đồ hữu ích để trực quan hóa các góc.

Đặt Y = yaw, P = pitch.

Đầu tiên để có được Yaw bạn muốn:

tan(Y) = x/(-y) 

Bây giờ để có được sân:

tan(P) = sqrt(x^2 + y^2)/z 

Để có được giá trị thực tế cho Y và P bạn sẽ cần phải sử dụng nghịch đảo tan, tôi đã viết nó ở trên bằng cách sử dụng tan để làm cho dẫn xuất rõ ràng hơn.

Lưu ý rằng các dấu trừ trừ phụ thuộc vào cách bạn xác định góc và trục của bạn, nhưng bạn sẽ nhận được ý tưởng.

Sau đó, bạn có thể đặt cuộn thành 0 hoặc bất kỳ thứ gì bạn muốn.

+1

Nhưng thực tế thường có hướng 'lên' trong bất kỳ ứng dụng nào và bạn hầu như luôn chọn hướng mà giữ 'lên' càng gần càng tốt. – sigfpe

+0

Cảm ơn rất nhiều vì đã trả lời. Có bạn là đúng, cuộn không thể được xác định chỉ bằng một vector Tôi cần một vector lên (như user207442 gợi ý) hoặc một vô hướng xác định góc. Tôi đã giải quyết được vấn đề của mình bằng cách sử dụng gluLookAt nhưng tôi vẫn tò mò về cách để có được những góc độ này. – Jack

+0

Biểu hiện của bạn cho tan (Y) ít nhiều trực quan. Đối với tan (P) không quá nhiều. Bạn có thể giải thích tại sao biểu thức này cho tan (P), hoặc liên kết đến một nguồn giải thích nó? – dinosaur

2

phương trình của pheelicks là sai. Kính gửi các googlers tương lai, tại đây bạn có được những gì hiệu quả:

Giả sử quảng cáo chiêu hàng: xoay theo trục X, yaw: xoay theo trục Y, cuộn: xoay theo trục Z. Hướng vectơ V (x, y, z)

pitch = asin(V.y/length(V)); 
yaw = asin(V.x/(cos(pitch)*length(V))); //Beware cos(pitch)==0, catch this exception! 
roll = 0; 
+0

Nó trông giống như tôi khá giống điều đó, có lẽ bạn nên kiểm tra lượng giác của bạn. – meneldal

6

Không có phương trình nào là 'sai' nhưng tất cả đều hơi vụng về. Ryder052, ví dụ của bạn không tính đến một số trường hợp nhất định như bạn đã nhận xét. Tại sao không sử dụng atan2?

đơn vị Given (bình thường) hướng vector d

pitch = asin(-d.Y); 
yaw = atan2(d.X, d.Z) 
Các vấn đề liên quan