Không. Không bao giờ bạn nên có một ma trận thế giới rõ ràng trong shader của mình.
Một lời giải thích chi tiết về lý do tại sao có thể được tìm thấy ở đây , nhưng phiên bản ngắn thực sự rất đơn giản: bạn không bao giờ cần nó và nó có thể giết chết độ chính xác của dấu phẩy động của bạn.
Nếu không gian thế giới của bạn quá lớn, thì một chiếc máy ảnh ở xa nguồn gốc có thể gây ra các vấn đề chính xác về điểm nổi.
Tất cả không gian thế giới không gì khác hơn là một trung gian giữa không gian mô hình và không gian máy ảnh. Đó là nơi bạn có thể thể hiện camera và tất cả các vật thể khác trong cùng một không gian. Nhưng tất cả những gì bạn sử dụng là để tạo ra ma trận từ máy ảnh đến máy ảnh, sau đó bạn áp dụng cho tất cả các ma trận từ mô hình đến thế giới để tạo ma trận từ mô hình đến máy ảnh.
Bạn có thể xử lý các vấn đề chính xác trong C ++ bằng cách sử dụng gấp đôi thay vì thả nổi cho các tính toán ma trận. Bạn có thể chuyển đổi chúng trở lại phao trước khi tải chúng lên shader.
Vậy tại sao bạn cần một biến đổi không gian thế giới rõ ràng trong shader của bạn? Trong mã nguồn của bạn, có. Nhưng trong shader của bạn? Bạn sẽ làm gì với nó mà bạn không thể làm với không gian máy ảnh?
Ánh sáng có thể được thực hiện trong không gian máy ảnh dễ dàng như không gian thế giới; tất cả những gì bạn phải làm là chuyển đổi vị trí / hướng ánh sáng của bạn thành không gian camera. Xét cho cùng, không gian máy ảnh có cùng quy mô với không gian thế giới. Bạn thực hiện chuyển đổi này một lần trên mỗi khung hình cho mỗi ánh sáng; hầu như không phải là gánh nặng hiệu năng ngay cả trên CPU.
Vì vậy, hoàn toàn không có điểm nào trong việc phơi bày các shader của bạn thành một biến đổi không gian thế giới rõ ràng . Đó chỉ là một bước trung gian mà bạn gấp vào ma trận của mình.