Zaawansowana grafika komputerowa


20.II.2002 Ćwiczenia organizacyjne.

Zadanie 1 (termin 2 tygodnie).

Treść zadania jest dość obszerna, samo zadanie powinno być dość ciekawe.
Oto najprostszy, konsolowy program rysujący tzw. zbiór Julii na płaszczyźnie.

# include <complex.h>
# include <stdio.h>

void Julia(complex<double> c)
{
    int i,j;
    double px,py;
    complex<double> x;
    unsigned char iter;

    for (j=0,py=-2.04;j<24;j++,py+=0.17)
        for (i=0,px=-2.00;i<80;i++,px+=0.05)
        {
            iter=0;
            x=complex<double>(px, py);            // [1]
            while ((abs(x)<4.0) && (iter<31))
            {
                iter++;
                x=x*x+c;
            }
            putc(63-iter, stdout);
        }
}

int main()
{
    Julia(complex<double>(0, -1)); 
    return 0;
}


Zbiór ten jak widać istnieje na płaszczyźnie zespolonej, w wycinku [-2,2] x [-2,2]. W celu wyznaczenia 'koloru' każdego punktu p takiego wycinka, algorytm iteruje funkcję
f(z) = z2+c

przy początkowej wartości parametru z równej p ([1]) dla jakiegoś ustalonego c. Iteracja przerywana jest w dwóch przypadkach:
(zainteresowanych głębszym zrozumieniem istoty fraktalnych zbiorów Julii i Mandelbrota odsyłam np. do "Granice chaosu. Fraktale" Peitgena, Jurgensa i Saupego).
Okazuje się, że iteracja tak prostej funkcji prowadzi do zbiorów fraktalnych nie tylko w przestrzeni liczb zespolonych. Zadanie polega na napisaniu programu wizualizującego fraktalne zbiory Julii w przestrzeni kwaternionów.

Specyfikacja:
Wskazówki:
Propozycje dalszego rozwijania programu:

Przykładowy obraz 4-wymiarowego zbioru Julii, wygenerowany przez program Quat 1.10, wygenerowany z dwóch różnych pozycji obserwatora tak, aby umożliwić oglądanie stereoskopowe (zezem rozbieżnym)

6.III.2002

Zadanie 2 (termin 2 tygodnie).

Należy napisać prosty engine ray-trace'ujący, który będzie w kolejnych zadaniach rozwijany.

Specyfikacja: Specyfikację należy potraktować jako pewien kierunek rozwoju engine'u, nie zaś jako listę szczegółowych wymagań.

Pomocna literatura:

[1] Nicholas Wilt, "Ray-tracing zorientowany obiektowo" + biblioteka OORT1.0 (do ściągnięcia z sieci)
10.IV.2002

Zadanie 3 (termin 17.IV.2002).

W zbudowanym w zadaniu 2 engine zaimplementować dowolny mechanizm przyspieszania obliczeń punktów przecięcia promienia z najbliższym obiektem. Dodatkowo zaimplementować możliwość tworzenia obrazów stereoskopowych.

Specyfikacja:

Zadanie 4 (termin 29.V.2002).

Zbudowany engine wyposażyć w następujące metody przyspieszania obliczeń: