Phạm vi [-1 ; 1] x [-1 ; 1] x [0 ; 1]
được đề cập trong hướng dẫn đề cập đến khối lượng xem chính tắc . Đây là dữ liệu đỉnh không gian tọa độ cuối cùng được ánh xạ tới trước khi mọi thứ được rasterized lên màn hình của bạn. Để hiểu chính xác điều này có nghĩa là gì, nó giúp xem xét một đường ống kết xuất thường trông như thế nào.
Phối hợp không gian
Không gian tọa độ đề cập đến hệ tọa độ bạn sử dụng để xác định vị trí của các đỉnh trong nó. Như một ví dụ thực tế, hãy tưởng tượng bạn có một bàn làm việc với bàn phím và bạn muốn thể hiện vị trí của bàn phím. Bạn có thể xác định góc phía trước bên trái của bàn là vị trí (0, 0, 0)
- đây được gọi là gốc -, trục X nằm dọc theo chiều dài của bàn (trái sang phải), trục Y nằm dọc theo độ sâu của bàn (gần xa) và trục Z được đặt thẳng đứng lên từ bàn. Nếu bàn phím của bạn nằm 50 cm ở bên phải của góc này và cách mép gần nhất 10 cm, thì nó nằm ở vị trí (50, 10, 0)
.
Ngoài ra, bạn có thể xác định góc của căn phòng của bạn là vị trí (0, 0, 0)
. Hãy nói rằng bàn của bạn nằm cách bức tường bên trái 200 cm, cách bức tường phía trước 300 cm và bàn làm việc có chiều cao 70cm. Trong trường hợp này, đỉnh bàn của bạn được đặt ở vị trí (200, 300, 70)
và bàn phím của bạn được đặt tại (250, 310, 70)
.
Đây là hai ví dụ về các không gian tọa độ khác nhau và cách chúng ảnh hưởng đến tọa độ vị trí của các đối tượng bên trong chúng. Tương tự, dữ liệu đỉnh trong đường ống kết xuất 3D được chuyển đổi qua các không gian tọa độ khác nhau trước khi kết thúc trên màn hình của bạn.
Phối hợp các không gian trong đường ống kết xuất 3D
Các đối tượng riêng lẻ được mô hình hóa trong phần mềm 3D như Autodesk Maya, Blender .... Chúng thường được mô hình hóa tập trung xung quanh nguồn gốc. Không gian tọa độ này được gọi là không gian mô hình . Nếu bạn kết xuất nhiều đối tượng trong không gian mô hình lại với nhau, tất cả chúng sẽ được xếp chồng lên nhau ở giữa gốc.
Thay vào đó, một không gian tọa độ mới gọi là không gian thế giới được xác định. Hãy nghĩ về điều này như thế giới trò chơi của bạn, với nguồn gốc là trung tâm của thế giới. Khi chuyển đổi không gian mô hình sang tọa độ không gian thế giới, các bản dịch, phép quay, tỷ lệ và các thao tác khác được thực hiện. Ví dụ: nếu bạn muốn kết xuất bàn phím ở vị trí (250, 310, 70)
của thế giới của mình, bạn sẽ bù tất cả các đỉnh của nó bằng vectơ này. Về mặt toán học, điều này được thực hiện bằng cách sử dụng ma trận biến đổi . Bạn có thể áp dụng một chuyển đổi khác nhau cho từng đối tượng riêng lẻ để đặt các đối tượng trong thế giới trò chơi của bạn.
Bây giờ bạn có một đống lớn các đỉnh trong đó mọi đối tượng được đặt ở vị trí chính xác. Bây giờ bạn cần xác định phần nào của thế giới bạn muốn xem xét. Điều này được thực hiện bằng cách di chuyển tất cả dữ liệu đỉnh vào không gian camera . Một quy ước thường được sử dụng là đặt camera ở vị trí gốc của không gian camera , để nó nhìn về phía trục Z dương ( vectơ mắt ) và có điểm trục Y dương hướng lên ( vectơ hướng lên ). Khi chuyển đổi từ không gian thế giới sang không gian mô hình, do đó, chúng tôi muốn di chuyển và xoay tất cả dữ liệu đỉnh để các đối tượng tiêu điểm của chúng tôi ở gần điểm gốc và có tọa độ Z dương.
Khi bạn nhìn vào các vật thể trong cuộc sống thực, bạn sẽ nhận thấy một hiện tượng gọi là báo trước . Điều này có nghĩa là các đối tượng ở gần bạn có vẻ lớn hơn (nghĩa là chiếm nhiều góc nhìn của bạn hơn), trong khi các đối tượng ở xa bạn xuất hiện nhỏ hơn (tức là chiếm ít hơn tầm nhìn của bạn). Chúng tôi mô phỏng điều này bằng cách áp dụng chuyển đổi phối cảnh , di chuyển tọa độ đỉnh không gian máy ảnh của chúng tôi sang không gian được chiếu .
Cuối cùng, lưu ý rằng chúng ta có dữ liệu đỉnh 3D, cần được hiển thị trên màn hình 2D (ví dụ: 1920 x 1080 pixel). Do đó, dữ liệu đỉnh trong không gian camera được chuyển thành không gian màn hình . API đồ họa của bạn đảm nhiệm việc hiển thị dữ liệu đỉnh không gian màn hình cho màn hình của bạn. Quá trình chuyển đổi dữ liệu đỉnh thành pixel trên màn hình của bạn được gọi là rasterization . Nhưng tọa độ đỉnh nào kết thúc ở đâu trên màn hình của bạn? Đây là nơi mà khối lượng xem chính tắc phát huy tác dụng.
DirectX chỉ định rằng tọa độ X của đỉnh được ánh xạ tới vị trí nằm ngang trên màn hình. Cụ thể: phạm vi [-1 ; 1]
được ánh xạ tới [0 ; 1920]
(trong trường hợp màn hình 1920 x 1080). Tọa độ Y của đỉnh được ánh xạ tới vị trí thẳng đứng trên màn hình. Cụ thể: phạm vi [-1 ; 1]
được ánh xạ tới [0 ; 1080]
(trong trường hợp màn hình 1920 x 1080). Tọa độ Z được sử dụng để xác định các đỉnh cần được hiển thị ở phía trước hoặc phía sau nhau. Cụ thể, các đỉnh gần 0 nằm gần camera và sẽ được hiển thị ở phía trước. Các đỉnh gần 1 nằm cách xa canera và được hiển thị phía sau. Các đỉnh có tọa độ Z nhỏ hơn 0 nằm sau camera và do đó bị cắt bớt - tức là không được hiển thị. Các đỉnh có tọa độ Z lớn hơn 1 quá xa và cũng bị cắt bớt.
Do đó, chuyển đổi phối cảnh của bạn cần phải di chuyển tất cả các đỉnh bạn muốn hiển thị trên màn hình của bạn bên trong khối lượng xem chính tắc này. Trong hướng dẫn bạn đã làm theo, tất cả các biến đổi này được bỏ qua để giữ cho hướng dẫn đơn giản. Do đó, bạn đang trực tiếp kết xuất với khối lượng xem chính. Đây là lý do tại sao tác giả nói bất cứ điều gì ngoài phạm vi [-1 ; 1] x [-1 ; 1] x [0 ; 1]
không thể nhìn thấy.
Người giới thiệu
Đối với một bài viết có hình ảnh để minh họa các không gian tọa độ khác nhau này, hãy xem Ma trận chuyển đổi thế giới, chế độ xem và phép chiếu bằng CodingLabs .