Zaawansowana grafika komputerowa

Połączone wykład i ćwiczenia rozpoczynają się o 15:30 w poniedziałki, sala G-1-03. Zapraszam również na konsultacje w trakcie dyżurów (pokój C-2-24, terminy w USOSwebie).

Można mieć dwie nieusprawiedliwione nieobecności bez ponoszenia konsekwencji. Przy większej ich liczbie proszę się spodziewać dodatkowych projektów, przepytywania sprawdzającego znajomość zagadnień poruszanych na opuszczonych zajęciach, itp. rzeczy.

Literatura

Materiały do zajęć

Po zalogowaniu się w pracowni do Linuksa można je znaleźć w katalogu /home/palacz/ZGK/. W miarę postępu zajęć będę tam dorzucał nowe slajdy ilustrujące wykład, przykładowe programy, pliki danych, itp.

Zajęcia 2016-10-03

Przypomnienie podstawowych informacji o rastrowych formatach grafiki 2D. Rasteryzacja figur geometrycznych, biblioteka GD jako przykład prostego narzędzia służącego do tworzenia obrazów rastrowych.

Zadanie domowe: aktywować konto linuksowe, przypomnieć sobie podstawy pracy w linii komend, w tym kompilowanie programów w C/C++.

Zajęcia 2016-10-10

Zapoznanie się z możliwościami biblioteki Cairo. Warto przypomnieć sobie z zeszłego tygodnia podstawowe informacje o wektorowych formatach 2D oraz o reprezentowaniu przekształceń afinicznych.

Zajęcia 2016-10-17

Skalowanie obrazów rastrowych, filtrowanie w oparciu o LUT, filtry splotowe. Potem ćwiczenia z przetwarzania rastrów w Octave (open-source’owy odpowiednik MATLAB-a).

Zajęcia 2016-10-24

Zapoznanie się z kilkoma dodatkowymi rodzajami filtrów punktowych, następnie dalsze ćwiczenia z używania Octave’a.

Zajęcia 2016-11-07

Zajęcia odwołane z powodu choroby.

Zajęcia 2016-11-14

Zostawiamy Octave i przechodzimy do OpenCV. Po wysłuchaniu wprowadzenia (czym jest OpenCV, co oferuje, w jakich środowiskach jest dostępne, itp.) i sprawdzeniu czy przykładowe programy się kompilują proszę przejrzeć dokumentację i spróbować reimplementacji ćwiczeń z poprzednich tygodni. Na przykład: jak reprezentowane są obrazy RGB, a jak te w odcieniach szarości? Jak można skonwertować jeden na drugi? Czy w OpenCV są funkcje powalające przeskalować raster albo przetworzyć go filtrem konwolucyjnym?

Proszę się też zastanowić co każde z Was chciałoby napisać jako zadanie zaliczeniowe z grafiki 2D (potem będzie jeszcze drugie zadanie z 3D).

Zajęcia 2016-11-21

Opis przekształceń morfologicznych na kilku wybranych przykładach pochodzących z podręcznika prof. Tadeusiewicza.

Następnie proszę na własną rękę sprawdzić czy Octave oraz OpenCV oferują funkcje wykonujące takie przekształcenia, oraz trochę poeksperymentować. Najłatwiej pracuje się ze zdjęciami przedstawiającymi przedmioty rozrzucone na jednolitym tle. Mogą to być monety na blacie biurka, śrubki na taśmie montażowej, itp.

Przed obróbką przekształceniami morfologicznymi obrazy z kamery trzeba poddać binaryzacji, tak aby zamiast obrazów kolorowych lub w odcieniach szarości mieć obrazy czarno-białe. Przy tej okazji pojawi się pytanie: w jaki sposób dobrać próg dla algorytmu binaryzacji?

Po skończeniu zabaw z przekształceniami morfologicznymi mogą Państwo zająć się zadaniami zaliczeniowymi 2D.

Zajęcia 2016-11-28

Zapraszam do zapoznania się z przykładami od ppm01.c do ppm03.c oraz opencv04.cpp, starają się zilustrować typowy sposób zarządzania pamięcią przez biblioteki graficzne. Dodatkowo można tam zobaczyć jak obsługuje się kamery pod Linuksem, i jak zamienić ciąg bajtów pobrany z kamery na macierz OpenCV.

Na ostatnich zajęciach wywiązała się dyskusja o wizji komputerowej, przejrzymy więc dzisiaj slajdy z wykładu prof. Torralby i zobaczymy gdzie pojawiają się odwołania do algorytmów, o których mówiliśmy na poprzednich zajęciach.

Zajęcia 2016-12-05

Krótki wykład przedstawiający bibliotekę OpenSceneGraph. Następnie proszę przejrzeć dwa przykładowe programiki — powinny być zrozumiałe nawet dla osoby, która nigdy wcześniej nie miała styczności z OSG. Potem proszę spróbować zrealizować następujące punkty:

Zajęcia 2016-12-12

Kontynuacja poprzednich zajęć. Biblioteka OSG będzie podstawą drugiego zadania zaliczeniowego, spróbujcie więc się zorientować jak przy jej pomocy tworzyć interaktywne sceny 3D. Tak właściwie sprowadza się to do dwóch rzeczy:

Jako przykład prostej animacji proszę zaimplementować trzy różnokolorowe kule poruszające się wahadłowo po trzech osiach układu współrzędnych. Do tego zadania można podejść na różne sposoby, można np. spróbować użyć klasy osgAnimation::LinearMotion (patrz podręcznik).

Eksperymenty z obsługą klawiatury radzę zacząć od czegoś w stylu: jeśli użytkownik nacisnął A, wykonaj printf("Nacisnieto A\n"). Dopiero po upewnieniu się że wykrywanie naciśniętych klawiszy działa poprawnie można zastąpić printf instrukcjami modyfikującymi stan sceny.

Oprócz modyfikowania stanu obiektów sceny można też spróbować zmieniać położenie i orientację kamery.

Zajęcia 2016-12-19

Praca własna nad zadaniem zaliczeniowym.

Oprócz powyższego zapraszam do rzucenia okiem na przeglądarkową wersję OSG dostępną pod adresem osgjs.org. OSGJS jest oczywiście zaimplementowana w JavaScripcie i używa WebGL, ale stara się zachować jak największe podobieństwo do oryginalnej biblioteki.

OSGJS nie ma porządnej dokumentacji. Na szczęście dostępnych jest wiele przykładów, w których można podpatrzeć jak się tę bibliotekę inicjalizuje; potem już jest łatwiej, bo tworzenie grafu sceny jest robione tak samo jak w oryginalnej OSG.

Zajęcia 2017-01-16

Przypomnienie OpenGL, historii jego rozwoju, oraz standardów pochodnych: OpenGL ES (dla urządzeń mobilnych) i WebGL (dla javascriptowych aplikacji działających w przeglądarkach). To z nimi dwoma najprawdopodobniej będziecie Państwo mieli do czynienia we współczesnych czasach. Korzystanie z nich bezpośrednio jest dość niewygodne, korzysta się więc z różnego rodzaju bibliotek i frameworków je opakowujących.

W sieci można znaleźć mnóstwo bibliotek bazujących na WebGL. Część z nich jest bardzo obszerna i na bieżąco rozwijana przez ich twórców; część to zabawki napisane w miesiąc i zostawione potem odłogiem. Proszę poszperać w Internecie i spróbować znaleźć narzędzia, które pozwolą łatwo i szybko oprogramować dwa poniższe scenariusze.

  1. Artysta-grafik przygotował model pewnego przedmiotu, np. starożytnego egipskiego dzbana. Zrobił to w programie do modelowania 3D (powiedzmy że był to 3ds Max), i wręczył nam plik z modelem w natywnym formacie tego programu (a więc z rozszerzeniem .max) oraz dodatkowo plik z modelem wyeksportowanym do powszechnie obsługiwanego formatu OBJ.

    Chcesz umieścić ten model na stronie WWW jako ilustrację. Potrzebujesz więc biblioteki, która potrafi załadować model bryły z pliku o podanej nazwie, a następnie wyświetlić tę bryłę na stronie HTML. Biblioteka powinna pozwalać użytkownikom odwiedzającym stronę na dowolne obracanie bryły.

  2. Masz do wyświetlenia trójwymiarowy wykres. Nie wiesz z góry, jakie będą wartości danych, bo są one pobierane na bieżąco z bazy danych (np. wolumen sprzedaży w poszczególnych sklepach za ostatnie 14 dni) bądź też specyfikowane przez użytkownika (np. witryna z wykresem matematycznej funkcji, współczynniki funkcji są w polach tekstowych i można je dowolnie zmieniać).

    W tym scenariuszu będzie potrzebny framework pozwalający na możliwe łatwe skonfigurowanie wykresu (typ wykresu, wygląd i opis osi) oraz na dynamiczne ładowanie do niego zmieniających się danych.

Zajęcia 2017-01-23

Zajęcia zaliczeniowe — kończenie i oddawanie zadań domowych, wystawianie ocen.