Giới thiệu về chuyển đổi tọa độ của mô hình 3D
chất
Trước tiên
Bạn có thể thường thấy hình ảnh 3D trên màn hình TV và hiển thị trong trò chơi, nhưng làm thế nào để bạn hiển thị các đối tượng tồn tại trong không gian 3D, chẳng hạn như các nhân vật và tòa nhà di chuyển xung quanh trên màn hình, trên màn hình 2D?
Trong trò chơi 2D, chỉ có các yếu tố hai chiều của "X và Y" làm giá trị tọa độ và màn hình cũng là 2D, vì vậy nếu bạn vẽ một đối tượng bằng cách chỉ định vị trí tọa độ của X và Y, bạn sẽ trực giác hiểu nó sẽ được vẽ như thế nào ở vị trí nào.
Tuy nhiên, trong 3D, nó không dễ dàng như vậy. Như tên cho thấy, 3D là "3 chiều" và có ba thông tin tọa độ: "X, Y và Z". Vì tọa độ khác với màn hình 2D, nên không thể vẽ đối tượng như hiện tại.
Sau đó, phải làm gì là "chuyển đổi thông tin ba chiều thành thông tin hai chiều". Điều này thường được gọi là "chuyển đổi tọa độ". Hãy nhớ rằng việc chuyển đổi tọa độ này rất cần thiết cho lập trình 3D.
Có một số loại biến đổi tọa độ để chuyển đổi 3D sang 2D, nhưng có ba loại biến đổi tọa độ chính mà các lập trình viên xử lý: "biến đổi thế giới", "chuyển đổi chế độ xem" và "chuyển đổi trình chiếu". Ở đây, chúng tôi sẽ giải thích mọi thứ liên quan đến chuyển đổi tọa độ.
Hệ tọa độ thuận tay trái và tay phải
Trong 3D, có hai hệ tọa độ, "hệ tọa độ thuận tay trái" và "hệ tọa độ bên phải", có các hướng khác nhau cho mỗi tọa độ như thể hiện trong hình dưới đây.
Direct3D chủ yếu sử dụng hệ tọa độ thuận tay trái, nhưng cũng có các chức năng để tính toán cho các hệ tọa độ thuận tay phải. Tuy nhiên, XNA chỉ cung cấp các phương pháp tính toán cho các hệ tọa độ thuận tay phải. Điều này dường như phù hợp với thực tế là các ứng dụng khác thường sử dụng hệ tọa độ thuận tay phải.
Tất cả các mẹo XNA trên trang web này đều sử dụng hệ tọa độ thuận tay phải.
Hệ tọa độ cục bộ (Model Ord System)
Mỗi mô hình có một hệ tọa độ tập trung vào nguồn gốc. Khi tạo một mô hình với phần mềm mô hình hóa, tôi nghĩ sẽ dễ hiểu hơn nếu bạn tưởng tượng việc tạo ra nó với nguồn gốc là trung tâm.
Hệ tọa độ thế giới
Hệ tọa độ thế giới cho phép bạn đặt mô hình ở bất cứ đâu. Nếu bạn không làm gì trong quá trình biến đổi thế giới này, mô hình sẽ được đặt ở nguồn gốc giống như tọa độ địa phương. Vị trí không chỉ để di chuyển từ gốc, mà còn để xoay và mở rộng quy mô.
Xem hệ tọa độ
Khi bạn đã đặt mô hình theo tọa độ thế giới, bạn cần thông tin về nơi bạn đang tìm kiếm và nơi bạn đang nhìn vào không gian 3D. Đây là những gì chúng tôi gọi là "biến đổi quan điểm". Biến đổi chế độ xem thường được biểu diễn dưới dạng camera.
Các thông số cần thiết cho việc chuyển đổi này là "vị trí máy ảnh", "điểm quan tâm của máy ảnh" và "hướng lên trên của máy ảnh". Hướng của máy ảnh được xác định bởi ba thông số này. Hình dưới đây cho thấy máy ảnh từ góc nhìn của bên thứ ba.
Hình dưới đây thực sự được nhìn từ quan điểm của máy ảnh với sự sắp xếp được hiển thị trong hình trên (tại thời điểm này, chúng tôi vẫn chưa chuyển đổi tọa độ sang màn hình, vì vậy nó chỉ là một hình ảnh).
Trong phần giải thích trước, có vẻ như camera được định vị và tọa độ được biến đổi, nhưng trong tính toán thực tế, tọa độ thế giới được chuyển đổi theo vị trí và hướng của camera. Do đó, nguồn gốc là vị trí của máy ảnh như thể hiện trong hình bên dưới.
Hệ tọa độ chiếu
Khi bạn đã quyết định từ vị trí nào để xem không gian 3D, bước tiếp theo là xử lý hiển thị "các vật thể nhỏ ở xa" và "những thứ lớn ở gần". Đây được gọi là biến đổi phóng chiếu. Có hai phương pháp biến đổi hình chiếu, "chiếu phối cảnh" và "chiếu trực giao", nhưng hình ảnh "chiếu phối cảnh" thường được sử dụng như sau.
Chiếu phối cảnh sử dụng các tham số sau: Góc nhìn, Tỷ lệ khung hình, Vị trí clip chuyển tiếp và Vị trí clip phía sau. Khu vực có nhãn "frustum" trong hình trên cuối cùng sẽ xuất hiện trên màn hình.
"Góc nhìn" chỉ định phạm vi quan sát có thể nhìn thấy từ máy ảnh. Giảm góc phóng to, tăng nó sẽ thu nhỏ. Góc nhìn sẽ là giá trị thẳng đứng của frustum.
Tỷ lệ khung hình được sử dụng để xác định góc xem ngang, trong khi góc nhìn là góc thẳng đứng. Góc ngang thường được xác định bởi "góc nhìn × tỷ lệ khung hình" và tỷ lệ khung hình về cơ bản là giá trị của "chiều rộng ÷ chiều cao" của màn hình bạn đang cố gắng hiển thị. Nếu bạn thay đổi giá trị này, đối tượng 3D được hiển thị sẽ xuất hiện để kéo dài theo chiều ngang hoặc chiều dọc.
Vị trí clip chuyển tiếp và vị trí clip phía sau được chỉ định để xác định xem đối tượng được hiển thị ở phạm vi trước hay sau. Do tính chất của máy tính, không thể hiển thị đến vô cùng, vì vậy chúng tôi sẽ đặt giới hạn. Giá trị này cũng ảnh hưởng đến độ chính xác của bộ đệm Z, vì vậy không nên đưa nó vào vùng vẽ ngoài phạm vi không cần hiển thị.
Đối tượng biến đổi phối cảnh được chuyển đổi thành một không gian như bên dưới. Các đối tượng ở gần máy ảnh được phóng to và các vật thể ở xa sẽ được thu nhỏ lại.
Điều này được minh họa trong một sơ đồ dễ hiểu dưới đây.
Nếu bạn thực sự nhìn nó từ quan điểm của máy ảnh, nó trông giống như bên dưới.
Một phương pháp biến đổi chiếu khác là chiếu trực giao, chiếu một khu vực có thể nhìn thấy như bên dưới. Bởi vì chiều rộng và chiều cao không đổi bất kể chiều sâu, kích thước của vật thể không thay đổi theo chiều sâu.
Hệ tọa độ màn hình
Sau khi chuyển đổi trình chiếu, nó được chuyển đổi thành tọa độ của màn hình thực tế. Mặc dù là màn hình, vị trí và phạm vi của màn hình thay đổi tùy thuộc vào cài đặt chế độ xem được đặt trên thiết bị. Tuy nhiên, trong trường hợp trò chơi, tọa độ máy khách của cửa sổ thường là khung nhìn như hiện tại, vì vậy tôi không nghĩ bạn cần phải lo lắng quá nhiều.
Tọa độ của màn hình (0, 0) được chuyển đổi từ tọa độ chiếu (-1, 1, z). Tương tự, tọa độ màn hình (chiều rộng, chiều cao) được chuyển đổi từ tọa độ chiếu (1, -1,z).