Grafika Komputerowa (studia wieczorowe)

Semestr zimowy 2008/2009:
Wykład: wtorek 16-17, sala 104
Pracownia/Ćwiczenia: środa 16-18, sala 107/104
Konsultacje:



Informacje bieżące:

Wyniku egzaminu z 18.II w formacie ASCII
Wpisy z egzaminu poprawkowego: Czwartek 19.II godz 15:15-16:30

Wyniku egzaminu z 4.II w formacie ASCII
Wpisy: Czwartek 5.II 15:30-16:30

Wyniki kolokwium

Informacje o kolokwium

Kolokwium będzie się składało z 4 zadań tego typu jak na listach z ćwiczeń i 2 dodatkowych zadań z pozostałego materiału z wykładu, przykłady tych zadań poniżej:
  1. Zaproponuj algorytm znajdowania przeciecia prostopadłoscianu z promieniem czyli półprosta okreslona przez punkt poczatkowy P i wektor kierunkowy D (mozna zaadaptowac jeden z algorytmów z wykładu).
  2. Przedstaw zasady działania, różnice i zastosowania metod cieniowania wielokątów: stałym kolorem, Gouraud i Phonga.

Punktacja (wersja robocza):

Program wykładu:

Program wykładu 2007/08

Literatura:

Pozycje podstawowe wydane w Polsce:
  1. M. Jankowski, Elementy grafiki komputerowej, WNT, Warszawa 1990.
  2. J.D. Foley, A. van Dam, S.K. Feiner, J.F. Hughes, Wprowadzenie do grafiki komputerowej, WNT, Warszawa 1995.
  3. J. Zabrodzki (red.), Grafika Komputerowa, metody i narzędzia, WNT 1994.
  4. T. Pavlidis, Grafika i przetwarzanie obrazów, WNT, Warszawa 1987.
Inne podstawowe:
  1. J.D. Foley, A. van Dam, S.K. Feiner, J.F. Hughes, Computer Graphics - Principles and Practice,  2nd edition, Addison-Wesley, Reading, Massachusetts 1992. (takze  tych samych autorów  ``Interactive Computer Graphics'',  ``Introduction to Computer Graphics'').
  2. P. Shirley, Fundamentals of Computer Graphics, A.K.Peters, Natick Massachusetts 2002.
  3. A. Glassner, Principles of Digital Image Synthesis, Morgan Kaufmann Publ., San Francisco 1995.
Pozostałe (dostępne w bibliotece instytutu):
  1. A. Watt, 3D Computer Graphics, 2nd edition, Addison-Wesley, 1993.
  2. D.F. Rogers, Procedural Elements for Computer Graphics,   McGraw Hill 1985 (przeklad rosyjski, Mir 1989).
  3. D. Hearn, P. Baker, Computer Graphics, Prentice-Hall, Englewood Cliffs, 1986.
  4. R. Salmon, M. Slater, Computer Graphics: system and concepts, Addison-Wesley, 1987
  5. A.S. Glassner, Graphics Gems, Academic Press, Boston 1990.
  6. J. Arvo, Graphics Gems II, Academic Press, Boston 1991.
  7. D. Kirk, Graphics Gems III, Academic Press, Boston 1992.
  8. P.S. Heckbert, Graphics Gems IV, Academic Press, Boston 1994.

Linki:

Ogólne:

Oprogramowanie:

  • XnView  - przeglądarka i konwerter plików graficznych (Win/Linux/...) oraz GFL SDK czyli biblioteki do czytania/zapisywania wielu formatów plików graficznych.
  • GIMP  - program do edycji grafiki rastrowej (licencja GNU)
  • Blender  - program do modelowania scen 3D, renderowania i tworzenia animacji (licencja GNU)
  • Wings3D  - prostszy program do modelowania scen 3D

OpenGL:

OpenGL Toolkits (otwieranie okna, obsługa klawiatury i myszy...) :

Interface Libraries (biblioteki z przyciskami, suwakami,... ):

Zasoby lokalne:

Iluzje:


Pracownia/Ćwiczenia: środa 16-18, sala 107/104

Zaliczenie/Punktacja:

Zaliczenie będzie oparte na zrobionych na pracowni zadaniach oraz aktywności na ćwiczeniach w postaci rozwiązywanych zadań i kolokwium.

Zadanie 1 (pracownia 8.X.2008):

Zadanie 2 (pracownia 15.X.2008):

  • Zmodyfikować przykład tcube.c definiując widok perspektywiczny przy użyciu funkcji gluPerspective() i definicji obserwatora przy pomocy gluLookAt() (np. patrzymy się z [3,1.5,2] na punkt 0, usunąć na razie efekt uciekania sześcianu).
  • Zmodyfikować przeklad tak aby obserwator poruszał się po okręgu na płaszczyźnie y=1.5 o promieniu 2 (parametryzacja okręgu: x=2cos(a), z=2sin(a) gdzie a jest zmiennym katem).
  • Dodać double-buffering celem wyeliminowania migania: glutSwapBuffers() i GLUT_DOUBLE zamiast GLUT_SINGLE
  • Dodać drugi mały sześcian lub kulkę która będzie poruszać się wewnątrz sześcianu i będzie odbijać się od brzegów zgodnie z zasada kat padania równy katowi odbicia. Początkowo pozycja w 0 i predkość początkowa dana jako wektor [x,y,z] zadany jako stała lub wektor losowy. Pozycja jest modyfikowana przez funkcje idle() tak jak i obserwator.
  • Uatrakcyjnić kształt kulki/sześcianu np. dorobić uszy,....

Zadanie 3 (pracownia 22-29.X.2008):

Zaimplementować prosta animacje, która można rozwinąć do prostej gry:
  • Scena składa się z brązowego prostokąta na którym mamy narysowany okrągły tor w ciemniejszym kolorze (np. GL_TRIANGLE_STRIP). Po bokach toru należy narysowac pewną liczbę drzew np. jako kule na prostopadłościanach (przeskalowane cube).
  • Na torze stoi samochód narysowany np. z dwoch prostopadłościanów (wire). Po nacisnięciu spacji samochód zaczyna sie poruszać ze stałym przyspieszeniem. po okrągłym torze (parametryzacja pozycji podobnie jak w poprzednim zadaniu (cos/sin)).
  • W jednym oknie mamy dwa widoki (użyc w display 2 razy funkcji glViewport) jeden dla obserwatora statycznego który widzi z góry całą scene i drugi z pozycji kierowcy samochodu (tak aby widać też kawalek samochodu - wireframe, widoki obok siebie lub PIP)
  • Użyć DOUBLE_BUFFER i DEPTH_BUFFER aby wyeliminować miganie i zapewnić poprawną widoczność.
  • W zależności od inwencji rozwinąc program udoskonalając scene, zmieniając tor lub robiąc prostą gre np. dodając poślizg na zewnątrz zależnie od prędkości i mierząc czas 5 okrążeń przy sterowaniu z klawiatury (gaz/hamulec,...).

Ćwiczenia 5.XI.2008: Lista (pdf)

Przed ćwiczeniami należy rozwiązać zadania z listy i na cwiczeniach zadeklarować sie które zadania potrafi się rozwiązać.

Zadanie 4 (pracownia 12-26.XI.2008):

Wyświetlanie mapy wysokości terenu z danych SRTM.
  • Dane SRTM SRTM ver.4 z CGIAR-CSI SRTM 90m są w formacie geotiff. Każdy plik to wysokości dla kawałka ziemi 5x5 stopni geograficznych na regularnej kracie 6000x6000. Wysokości w metrach [-500,9000] inne ujemne wartości oznaczaja regiony bez danych.

    Geotiff mozna skonwertować do prostego formatu PNM. Przykładowy plik do czytania dla kawałka Polski: 15-20E, 50-55N tutaj Przykladowy kod sample wczytuje plik pomijając nagłówek i odwracając kolejność bajtów na właściwą. Otrzymujemy dane w tablicy.

  • Wyświetlić siatkę czworokątów/trójkątów (lub lepiej przy pomocy GL_QUAD_STRIP całe paski) z widokiem z góry, rzut perspektywiczny lub równoległy z możliwościa zbliżania/oddalania i przesuwania na boki i góra/dół. Należy wyświetlać np. co 16 punkt w tablicy (6000x6000 to troche za dużo i będzie wolno działać) i dodać wybór dokladności np. klawisze 1-9.
  • Nadać punktom kolory zależne od wysokości np.
           if      (ht < 0  )   glColor3f(0.,       0.,        1.); //blue
           else if (ht < 500)   glColor3f(0.,       ht/500,    0.); //->green
           else if (ht < 1000)  glColor3f(ht/500-1, 1.,        0.); //->yellow
           else if (ht < 1500)  glColor3f(1,        ht/500-2., 0.); //->red
           else glColor3f(1.,1.,1.);                                //white
        

Zadanie 6 (pracownia 3-10.XII.2008):

Oświeltenie w OpenGL:
  • Przeczytać Basic OpenGL lighting i więcej w rozdziale OpenGL Red Book o oświetleniu
  • Przetestować oświetlenie modyfikując przykład: lighting.c przez skorzystanie z funkcji glColorMaterial(). Dla obu wersji glMaterial / glColorMaterial oświetlać obiekty: glutSolidSphere() i wlasny obiekt zdefiniowany przez glBegin/glEnd
    (Uwaga: zdefiniować wektory normalne).
  • Zmodyfikować jeden z poprzednich programów(3 lub 4) dodając oświetlenie w postaci kilku różnych świateł: kierunkowe/punktowe z mozliwoscia włączania, wyłączania i zmiany pozycji.
  • Przetestować jak zmiana położenia obserwatora wpływa na oświetlenie
  • Przetestuj funkcję tłumienia (Attenuation) światła z odległościa jako odwrotność funkcji liniowej i fizycznie poprawnej kwadratowej.

Zadanie 7 (pracownia 15.XII.2008):

W jak najkrotszym kodzie w C/OpenGL/GLUT zaimplementowac obracajaca sie wokol wlasnej osi choinke skladajaca sie z cylindrycznego lub stozkowego pnia i galezi. Z pnia wychodzi 8 galezi z ktorej kazda ma 8 galazek ktore maja po 8 igiel. Widok powinien byc lekko z gory, a choinka powinna byc zielona, wymagane jest takze wykorzystanie oswietlenia dla lepszego wygladu.

Pierwsza wersja powyżej powinna być minimalistyczna tak aby kod był jak najkrótszy (wykorzystac samopodobieństwo/fraktaloność choinki, transformacje OpenGL i usunąc niepotrzebne funkcje). Druga wersja może być dłuższa, należy zadbac o jakość choinki, kolory, dobór oświetlenia i wykazać się inwencją np. dodać różnokolorowe bombki ze spekularnymi rozblyskami.

Zadanie 8 (pracownia 7.I.2009,... ):

Zapoznać sie z tutorialami NeHe o teksturowaniu: Lesson 6 i Lesson 7.

Napisać program przedstawiający animacje układu słonecznego złożony z co najmniej Słońca, Ziemi i Księżyca wraz z teksturowaniem i oświetleniem od Śłońca. Na Ziemię powinna być nałożona tekstura Blue Marble, a na Księżyc tekstura z widocznej strony księżyca (zdjęcie z Ziemi).

Ćwiczenia 14.I.2009: Lista (pdf)

Przed ćwiczeniami należy rozwiązać zadania z listy i na cwiczeniach zadeklarować sie które zadania potrafi się rozwiązać.

Kolokwium 21.I.2009

Pracownia i wyniki kolokwium 28.I.2009


Andrzej Łukaszewski (anl(at)ii.uni.wroc.pl)