Tiêu chuẩn tọa độ X, Y, Z?


12

Tuy nhiên, tôi khá mới đối với việc phát triển 3D của bất kỳ loại trò chơi nào. Khi tôi đọc qua các hướng dẫn và ví dụ, tôi thấy rằng tọa độ X / Y / Z có vẻ hơi ngược so với dự đoán đầu tiên của tôi.

Tôi đã tưởng tượng rằng nếu một người đi bộ quanh một cánh đồng, vị trí X / Y của họ sẽ thay đổi và nếu họ nhảy hoặc đi lên hoặc xuống một ngọn đồi, thì vị trí Z của họ sẽ thay đổi. Giả định của tôi có vẻ sai vì đi bộ quanh một cánh đồng dường như thay đổi X / Z và nhảy hoặc đi lên / xuống một ngọn đồi làm thay đổi Y.

1) Quan sát của tôi có đúng không? 3D là mới đối với tôi và tôi có thể không nghĩ về mọi thứ đúng cách.

2) Logic đằng sau chuyển động ngang là X / Z và chuyển động dọc là Y là gì?

3) Tôi có thể sử dụng X / Y làm chuyển động ngang và Z làm chuyển động dọc trong Khung XNA không?


Hệ thống tọa độ tay trái / phải. DirectX là tay trái, mặc định trong OpenGL là tay phải.
Jonathan Connell

Câu trả lời:


19

Giả định của bạn không sai: mỗi động cơ xử lý các tọa độ khác nhau. Nói chung, X hầu như luôn luôn là trục Đông-Tây nhưng cho dù Y hay Z là trục Độ cao có xu hướng thay đổi. Theo tôi hiểu, Quake 3, Source Engine và Torque engine đều có Z như trên. Công cụ mô hình 3DS Max cũng vậy. Nó không phải là hiếm.

Thật có ý nghĩa khi có một hệ tọa độ được sắp xếp theo thứ tự mức độ quan trọng giảm dần, do đó việc làm phẳng một biểu diễn thành ít chiều hơn là điều dễ hiểu hơn. Ví dụ: nếu trò chơi của bạn được đặt trên bản đồ chiều cao 2D, điều đó có nghĩa là Z sẽ được 'lên', bởi vì sau đó tọa độ X và Y của bạn trong bản đồ thế giới 3D trực tiếp đến tọa độ X và Y trên bản đồ độ cao. Mặt khác, nếu bạn nghĩ chủ yếu về mặt kết xuất (và nhiều nhà phát triển công cụ trò chơi làm), bạn đã quen với X và Y là tọa độ màn hình, do đó, việc thêm trục thứ 3 sẽ tự nhiên đi vào hoặc ra khỏi màn hình.

Sử dụng những gì dễ nhất cho bạn, nhưng lưu ý rằng bất kỳ lựa chọn nào là tùy ý và bạn có thể cần phải chuyển đổi giữa chúng và sử dụng nhiều hệ tọa độ trong một chương trình.


Tôi thực sự thích hai câu trả lời khác tốt hơn, nhưng vì đây là câu trả lời được chấp nhận, nên một lưu ý để chỉ ra rằng Y thẳng đứng và Z nằm trong màn hình là cách mà hầu hết các API phần cứng 3D được thiết lập để hoạt động (DirectX và OpenGL) . Nếu bạn muốn hệ thống của riêng bạn, chỉ cần lưu ý điều này vì một số bản dịch có thể được yêu cầu. (Một cái gì đó được sử dụng không đúng cách nhưng nhất quán thường có thể hoạt động như mong muốn, do đó 'có thể là' :))
James

1
Về mặt kỹ thuật, OpenGL có Z xuất hiện trên màn hình theo mặc định, khi bạn bao gồm hướng, vì vậy mặc dù cả nó và DirectX đều có Z song song với hướng xem, chúng vẫn không tương thích! Khi làm việc với 3D, bạn cần có khả năng chuyển từ hệ tọa độ này sang hệ tọa độ khác thông qua các phép quay, dịch và chia tỷ lệ - thực sự, đây là cách các mô hình kết thúc trên thế giới - vì vậy không có quá nhiều điểm để gắn bó với bất kỳ khái niệm nào về Tiêu chuẩn.
Kylotan

Chỉ cần chỉ ra sau đó khi xử lý hàng triệu hình tam giác, có lẽ bạn càng phải làm ít hơn để chống lại hệ thống điều phối của phần cứng có thể tốt hơn;) Cuối ngày, làm cho trò chơi trở nên thú vị bất chấp mức độ căng thẳng .. Hãy làm những gì bạn muốn: )
James

Khái niệm "Z" khi đi vào / ra khỏi màn hình hoặc là độ cao có phần sai lệch. Nó có thể dễ dàng hơn để khái niệm hóa các biến đổi. Chúng tôi gửi tọa độ đỉnh 3D / 4D cuối cùng được chuyển đổi sang không gian cửa sổ 2D nhưng có giá trị độ sâu. Ý tưởng rằng API vốn đã ánh xạ tọa độ 3D của X, Y hoặc Z thành "độ sâu" không thực sự chính xác - bạn có thể đưa ra bất kỳ phép chuyển đổi nào thay đổi ý nghĩa của tọa độ. Khi kết thúc chuyển đổi đó, bạn vẫn sẽ nhận được tọa độ không gian cửa sổ 2D và giá trị độ sâu.
PatrickB

1
Tôi không hoàn toàn chắc chắn nơi chúng tôi không đồng ý với phần còn lại: tất nhiên bạn có thể sử dụng bất kỳ không gian tọa độ nào bạn muốn miễn là bạn có thể chiếu đến x, y, độ sâu cuối cùng, nhưng câu hỏi này chủ yếu là về lý do tại sao một số quy ước nhất định tồn tại đối với các hệ tọa độ, và các quy ước chắc chắn được liên kết với các khái niệm trong thế giới thực.
Kylotan

6

Hãy tưởng tượng nhìn vào một mảnh giấy được đưa ra trước mặt bạn với một biểu đồ trên đó, các trục thường được dán nhãn X ở phía dưới và Y lên theo chiều dọc; Điều này làm cho Z là trục ra ngoài dọc theo mặt đất.

Nó chỉ là một quy ước, nhưng nó được sử dụng rất nhiều trong đồ họa mà chúng ta nghĩ về Z như chiều sâu của cảnh.

Trong các lĩnh vực khác như CAD, phiên bản của bạn sẽ phổ biến hơn.


4

Ý tưởng là các trục x và y giữ nguyên - y là 'lên' trên màn hình và x nằm ngang.

z - chiều thứ ba, chiếu lại vào màn hình (bỏ qua các vấn đề về sự thuận tay ở đây). Trong 3 chiều, điều này có một chút kỳ lạ, nhưng đối với việc định vị mọi thứ trong không gian màn hình thì điều đó có ý nghĩa hơn.

3) Bạn có thể nếu bạn muốn, nhưng nó sẽ đau đớn và vụng về. Tôi sẽ khuyên bạn chỉ nên làm quen với Z-dự án vào / ra khỏi màn hình.


1

1) Có quan sát của bạn là chính xác.

2) Hệ thống tọa độ XYZ toàn cầu tiêu chuẩn có ý nghĩa khi bạn nghĩ về một game bắn súng góc nhìn người thứ nhất, khi bạn nhìn qua mắt một nhân vật trong cảnh với ma trận biến đổi (nhận dạng) trống. Giống như khi bạn vẽ một hệ tọa độ trên một tờ giấy, X chỉ sang phải và Y hướng lên trên. Theo quy tắc bàn tay phải (x-> ngón tay cái, y-> ngón trỏ, z-> ngón giữa), Z chỉ về phía bạn.

3) Điều đó sẽ không sai, nhưng nó sẽ là một sự chuyển hướng từ các tiêu chuẩn. Có ba vấn đề mà tôi có thể nghĩ đến vào lúc này: (a) Giả sử một ngày nào đó bạn muốn sử dụng thư viện vật lý sử dụng khung tọa độ chuẩn. Nếu bạn không tuân theo tiêu chuẩn, bây giờ bạn phải suy nghĩ về sự biến đổi đưa bạn từ thế giới của bạn sang thế giới vật lý. Có thể gây phiền nhiễu khi bạn muốn sửa một lỗi. (b) Khi bạn muốn chia sẻ mã với ai đó hoặc nhờ ai đó giúp phát triển, họ phải làm quen với quy ước của bạn. (c) Khi sử dụng các mô hình 3D tiêu chuẩn, bạn luôn phải có một biến đổi phía trên chúng để ngăn chúng nhìn sang một bên.

Bây giờ để thêm vào câu hỏi 2, thật hữu ích khi nghĩ về X, Y và Z không chỉ là ba chữ cái, mà là đúng, lên và ngược. Mỗi nhân vật trong cảnh đều có một hệ tọa độ cục bộ gắn liền với họ và trong các khung tọa độ cục bộ X của họ luôn luôn đúng, Y lên và Z ngược. Một khi bạn có điều này, bây giờ bạn có thể hiểu các vectơ mà bạn in ra hoặc viết các thuật toán của bạn theo cách có ý nghĩa. Giả sử bạn có hai nhân vật A và B và bạn muốn làm gì đó nếu một trong số họ đối mặt với người kia. Bạn có thể chỉ cần tìm vị trí của B trong khung tọa độ của A (Ta ^ -1 * p_b), nhìn vào vectơ bạn nhận được và xem Z (ngược) có âm và X (phải) và Y (lên) nhỏ không, vì vectơ đó cho bạn biết B lùi bao nhiêu, phải và lên đối với A.

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.