Сферична камера

Да се напише модификация към текущата камера, която я превръща в сферична камера. При сферичната камера, лъчите се генерират по следния начин:

Входящите параметри x, y на getScreenRay() се трансформират за да влезнат в границите -PI .. +PI и -PI/2 .. +PI/2 респективно, след което се ползват, съответно, като географска дължина и географска ширина (ъглите φ, θ според статията в английската wikipedia).
Генерирането на лъчите при зададените сферични ъгли трябва да е консистентно със досегашната камера. При ъгли 0, 0, генерираният лъч трябва да е (0, 0, 1), т.е. в посока положителната Z ос.
Сферичната камера трябва да игнорира параметрите pitch, roll, aspectRatio и fov на камерата и да се интересува само от pos (началото на лъчите) и yaw (завъртане около +Y оста). Припомняме, че при yaw = 0, камерата гледа в +Z посока, и с увеличаване на yaw, камерата се завърта наляво. Изисква се, при превключване към сферична камера, изгледът да е в същата посока, както е и при правоъгълна камера (вижте примерите).

Модификацията да се пуска чрез bool флагче "spherical", което добавете към Camera класа.

Така зададената задача носи 10 точки.

Примери:
1. meshes.hexray
2. boxed.hexray

Бонус (5т):

Да се добави възможност ъглите от географската дължина да се генерират само в определен резен (вместо 360 градусов, както е в базовата задача). За целта да се ползва параметъра fov на камерата (при fov 360, имаме базовата задача. Ако сложим fov 90, то камерата трябва да гледа в 90-градусов резен). Пример:

3. boxed.hexray@fov180

Comments

В първите 2 примера не са

В първите 2 примера не е променяна стойността на yaw, нали?
И може ли линк към статията в wikipedia?

1) Точно така, не е

1) Точно така, не е променяна
2) http://en.wikipedia.org/wiki/Spherical_coordinate_system