Làm thế nào để tôi biết nếu một ma trận phối cảnh là hệ tọa độ tay phải hay tay trái?


7

Ví dụ: nếu tôi xác định ma trận phối cảnh của mình như sau:

m[0]  = 1.f / ( aspect * focalLength );
m[5]  = 1.f / focalLength;
m[10] = -zFar / (zFar - zNear);
m[11] = -1;
m[14] = -(zFar*zNear)/(zFar - zNear);

Làm thế nào tôi có thể biết liệu ma trận phối cảnh của tôi là hệ tọa độ tay phải hay tay trái?

Câu trả lời:


7

Tôi nghĩ bạn có thể cho biết sự khác biệt so với việc bạn có 1 hay -1 trong dòng Z (hoặc cột tùy thuộc vào hướng ma trận). Đặc biệt:

  • Tay trái: 1
  • Tay phải: -1

Để so sánh, hãy xem cả hai liên kết này - D3DXMatrixPers perspectiveLHD3DXMatrixPers perspectiveRH . Vì DirectX thuận tay trái, bạn thường sử dụng phiên bản thuận tay trái có cột thứ 1 ở hàng thứ ba.

Mặt khác, OpenGL và XNA đều thuận tay phải và tôi có thể xác nhận rằng ma trận phối cảnh họ tạo sử dụng -1 thay vào đó, mặc dù OpenGL có nó ở cột thứ ba hàng thứ tư, trong khi XNA có nó ở cột thứ tư hàng thứ ba như DirectX (ma trận chính cột so với ma trận chính hàng).


4
Thật sự không đúng khi mô tả API là có một bàn tay cụ thể; sự thuận tay thường được quy cho mỗi người là một quy ước lịch sử hơn bất kỳ điều gì khác trong những ngày này, và mỗi người hoàn toàn có khả năng hỗ trợ sự thuận tay khác nếu được yêu cầu / mong muốn. Một số ghi chú OpenGL: opengl.org/resource/faq/technical/transformations.htm (9.150).
Maximus Minimus

@ mh01 Chắc chắn, chuyển đổi giữa các hệ tọa độ tay phải và tay trái có thể dễ dàng như áp dụng chuyển đổi tỷ lệ (1,1, -1) trước mọi thứ khác. Nhưng sẽ khôn ngoan hơn khi chơi theo các quy ước của từng API hơn là phải tự thực hiện chuyển đổi.
David Gouveia

2
Đối với D3D, rõ ràng nó không chỉ định bất kỳ quy ước nào và đã có cả hai phiên bản -RH và -LH của tất cả các hàm ma trận chiếu của nó kể từ ít nhất là D3D8. Liên quan đến RM vs CM - D3D thực sự sử dụng CM bên trong và ma trận phải được hoán vị khi gửi nó tới shader. D3D9 sẽ tự động làm điều đó cho bạn; trong 10 và 11 bạn phải tự làm điều đó. Mặc dù đồng ý rằng nếu bạn đang theo dõi mã mẫu, nhiều khả năng sẽ sử dụng các quy ước đã được thiết lập để mọi thứ sẽ rõ ràng hơn nếu bạn tự làm theo chúng.
Maximus Minimus
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.