Vâng, cần thiết để chiếu một thế giới 3D lên bề mặt 2D vì màn hình của bạn là bề mặt 2D.
Đồ họa 3D hoạt động ở các "không gian tọa độ" khác nhau và chúng được chuyển đổi giữa để có cảnh cuối cùng.
Hãy tưởng tượng ví dụ mô hình hóa thành phố. Bạn có thể xác định góc dưới cùng bên trái của bản đồ là (0, 0) và trên cùng bên phải là (1000000, 1000000). Bạn cũng có thể nói rằng như một quy tắc, một điểm sẽ đại diện cho một chân không gian thực. Đại diện này, chúng ta sẽ gọi World Space.
Để vẽ thành phố của bạn, bạn sẽ muốn nhập một số kiểu tòa nhà và đặt chúng trên thế giới. Vì vậy, bạn có được mô hình của một tòa nhà, nhưng khi bạn đang làm mô hình này, bạn không muốn phải lo lắng về kích thước của thế giới hoặc nơi nó sẽ - bạn có thể sẽ nói rằng góc dưới bên trái của tòa nhà là tại (0, 0) và trên cùng bên phải là (1, 1). Biểu diễn này, chúng ta sẽ gọi Model Space. Tuy nhiên, trên thế giới, tòa nhà có thể được đặt ở (104, 136) và bạn có thể muốn nó là 1000x1000 pixel, vì vậy bạn sẽ cần dịch nó sang (104, 136) và mở rộng nó lên 1000x. Điều này đang chuyển đổi nó từ Không gian Mô hình sang Không gian Thế giới.
Cuối cùng, không gian máy ảnh là cách bạn di chuyển trên toàn thế giới. Nếu bạn nghĩ về nó, di chuyển xung quanh trên thế giới có thể được nghĩ theo hai cách (ít nhất): Bạn di chuyển vòng quanh thế giới, hoặc thế giới di chuyển xung quanh bạn. Vì vậy, để thực hiện chuyển động dễ dàng, chúng tôi sẽ nói rằng máy ảnh luôn ở điểm (0, 0) quay xuống một số trục. Bây giờ nếu bạn muốn di chuyển về phía trước 10 pixel, thay vào đó bạn chỉ cần di chuyển mọi thứ trở lại 10 pixel. Nếu bạn muốn xoay, hãy xoay thế giới thay thế. Vì vậy, để kết xuất tòa nhà, trước tiên chúng tôi muốn biến đổi nó từ Không gian Mô hình thành Không gian Thế giới. Bây giờ, để thực sự vẽ nó, chúng tôi muốn biết nó ở đâu so với người xem, vì vậy chúng tôi chuyển nó từ World Space sang Camera Space.
. . .
Ngoài ra, nếu bạn muốn hiểu điều này rất tốt, một bài tập tốt là viết trình kết xuất khung dây 3D, tách biệt với OpenGL. Chức năng vẽ duy nhất của bạn có sẵn là DrawLine (x1, y1, x2, y2), vẽ một đường thẳng trên màn hình từ (x1, y1) đến (x2, y2).
Xin lỗi, tôi nên làm điều này rõ ràng hơn: Tôi biết lý do tại sao cần thiết để chiếu một thế giới 3D lên bề mặt 2 chiều. Tôi chỉ không biết tại sao không gian camera là cần thiết hoặc hữu ích cho mục đích này. – newprogrammer