Week 10

Task 1: Tạo tia camera

Triển khai vào  hàmCamera::generate_ray(...)trong src/pathtracer/camera.cpp .

Hàm này lấy tọa độ hình ảnh chuẩn hóax , y ) như đầu vào và trả về một biếnRaytrong hệ tọa độ thế giới (world coordinate). Theo quy ước, đầu tiên bạn sẽ biến đổi tọa độ hình ảnh sang hệ tọa độ máy ảnh , tạo ra tia trong hệ tọa độ máy ảnh , và cuối cùng là biến đổi nó thành tia trong không gian thế giới .

Không gian camera có hệ tọa độ riêng. Như minh họa bên dưới, trong hệ tọa độ máy ảnh, máy ảnh được đặt ở vị trí( 0 , 0 , 0 ) và nhìn dọc theo trục Z , được gọi là hướng nhìn của máy ảnh.

Dọc theo hướng xem này, chúng ta định nghĩa một cảm biến máy ảnh ảo hình chữ nhật được đặt theo trục nằm trên mặt phẳng Z = - 1. Trung tâm của cảm biến ở( 0 , 0 , - 1 ). Góc dưới cùng bên trái của nó ở $( - tan (\frac{hFov}{2}) , - t a n (\frac{v F o v}{2}) , - 1 )$ và góc trên cùng bên phải của nó ở $( - tan (\frac{hFov}{2}) , - t a n (\frac{v F o v}{2}) , - 1 )$, ở đây $hFov$ và $vFov$ là trường góc nhìn dọc theo trục X và Y.

https://i.imgur.com/1RInV9l.png

Cảm biến máy ảnh ảo này tương ứng với một hình ảnh. Một điểm trên ảnh có thể được ánh xạ tới cảm biến và ngược lại. Cụ thể, 2 tọa độ hình ảnh được chuẩn hóa là ( 0 , 0 ) và ( 1 , 1 ) ứng với góc dưới cùng bên trái và trên cùng bên phải của cảm biến trong không gian máy ảnh. Lưu ý rằng đối với tọa độ hình ảnh chuẩn hóa ( 0 , 0 ) được đặt ở góc dưới cùng bên trái của hình ảnh. Hệ tọa độ này khác với hệ tọa độ mà chúng tôi đã sử dụng trong Bài tập 1, trong đó( 0 , 0 ) ở góc trên cùng bên trái của hình ảnh.

Như thể hiện trong hình, tia trong không gian máy ảnh sẽ bắt đầu từ máy ảnh và đi qua điểm trên cảm biến tương ứng với tọa độ hình ảnh chuẩn hóa đầu vào ( x , y ) . Sau đó bạn muốn biến tia này thành tia trong không gian thế giới . Một tia thì có 2 thành phần có gốc và hướng. Bạn cần phải biến đổi cả hai một cách chính xác để chuyển đổi một cách chính xác một tia từ không gian máy ảnh sang không gian thế giới. Ngoài ra, chúng tôi yêu cầu rằng hướng tia phải là một vector chuẩn hóa .

Ghi chú thực hiện:

class Cameracó các biến thành viên sau đây mà bạn có thể sử dụng để cài đặt. Đây không phải là một danh sách đầy đủ.

Sau khi hoàn thành task 1 và 2, bạn sẽ có thể tạo hình ảnh để gỡ lỗi việc triển khai của mình.

Task 2: Tạo mẫu pixel

Điền vào PathTracer::raytrace_pixel(...)trong src/pathtracer/pathtracer.cpp .

Tọa độ pixel đầu vào nằm trong không gian hình ảnh chưa chuẩn hóa . Nhắc lại phần 1 rằng không gian ảnh có hệ tọa độ riêng, trong đó (0 , 0)được đặt ở góc dưới cùng bên trái của hình ảnh. Đầu vào ( x , y ) do đó tương ứng với góc dưới cùng bên trái của một pixel.

https://i.imgur.com/NyQuk0t.png