Ngoài ra, bạn có thể sử dụng bản đồ khối với kết cấu bầu trời thay vì sử dụng nhiễu perlin. Và tôi cũng nghĩ rằng điều đó sẽ làm cho cảnh của bạn trông đẹp hơn do có nhiều chi tiết và biến thể hơn trong bản đồ môi trường. Đó chính xác là những gì tôi đã làm khi tôi triển khai raytracer của mình.
Một lý do khác tôi khuyên bạn nên làm điều này là môi trường không cần chỉ có mây. Nó có thể có những ngọn núi, nó có thể là một cảnh trong nhà, có thể là một cảnh từ sao hỏa. Sử dụng bản đồ khối, điều duy nhất bạn cần làm là hoán đổi kết cấu và bạn đã hoàn thành.
Vì vậy, bước đầu tiên sẽ là tìm một bản đồ khối phù hợp với nhu cầu của bạn. Nó có thể được lưu trữ dưới dạng sáu kết cấu riêng biệt, hoặc dưới dạng một kết cấu giống như kết cấu bên dưới. Đồng thời kiểm tra liên kết này để biết thêm thông tin về cách tạo của riêng bạn:
Sau đó, trên mã của bạn, tôi khuyên bạn nên tạo một CubeMap
lớp để đóng gói các tính toán lấy mẫu. Lớp này nên biết làm thế nào để tải các kết cấu bản đồ cube, và đưa ra một ray nó sẽ có thể biết trong đó khuôn mặt và trong những gì vị trí để mẫu. Trong quá trình thực hiện, tôi thấy việc lưu trữ mỗi sáu mặt trong các đối tượng kết cấu riêng biệt và phân nhánh dựa trên hướng của tia dễ dàng hơn:
class CubeMap
{
public void Load(string path);
public Color GetSample(Ray ray);
private Texture[6] faces;
}
Trong trường hợp bạn chưa có Texture
lớp, chỉ cần tạo một lớp của riêng bạn. Nó có thể đơn giản như một mảng màu hai chiều. Vì vậy, chỉ là một tài liệu tham khảo và không đảm bảo về hiệu quả hoặc sự đúng đắn của việc triển khai này, đây là mã tôi đã sử dụng trong dự án của mình - CubeMap và CubeFace .