ZSNR9 im. Romualda Traugutta w Koszalinie Temat Grafika komputerowa Pracę wykonał Radosław Terefenko Kl. II LA I Grafika komputerowa Dział informatyki zajmujący się wykorzystaniem komputerów do generowania obrazów oraz wizualizacją rzeczywistych danych. Grafika komputerowa jest obecnie narzędziem powszechnie stosowanym w nauce, technice, kulturze oraz rozrywce. Kilka przykładowych zastosowań: *kartografia, *wizualizacja danych pomiarowych (np. w formie wykresów dwu- i trójwymiarowych), *wizualizacja symulacji komputerowych, *diagnostyka medyczna, *kreślenie i projektowania wspomagane komputerowo, *przygotowanie publikacji, *efekty specjalne w filmach, *gry komputerowe. ChociaŜ grafika komputerowa koncentruje się głównie na specjalistycznych algorytmach i strukturach danych, to jednak siłą rzeczy musi czerpać z innych dziedzin wiedzy. Na przykład aby uzyskać obrazy fotorealistyczne, naleŜy wiedzieć jak w rzeczywistym świecie światło oddziałuje z przedmiotami. Podobnie, aby symulacja jazdy samochodem była jak najwierniejsza, naleŜy wiedzieć jak obiekty fizyczne ze sobą oddziaływują. Początki grafiki komputerowej sięgają lat 50. XX wieku, jednak ze względu na duŜe koszty komputerów i urządzeń graficznych, aŜ do lat 80. grafika komputerowa była wąską specjalizacją, a na jej zastosowania praktyczne mogły pozwolić sobie ośrodki badawcze, duŜe firmy oraz instytucje rządowe. Dopiero gdy w latach osiemdziesiątych rozpowszechniły się komputery osobiste, grafika komputerowa stała się czymś powszechnym. PoniewaŜ celem grafiki jest generowanie obrazów, dlatego jednym z głównych kryteriów klasyfikacji jest technika ich tworzenia: 1. Grafika wektorowa — obraz jest rysowany za pomocą kresek lub łuków. Niegdyś powstawał tak obraz na ploterach kreślących, ale jeszcze do lat 80. XX wieku były wykorzystywane monitory CRT, które kreśliły obraz w analogiczny sposób jak oscyloskopy. 2. Grafika rastrowa — obraz jest budowany z prostokątnej siatki leŜących blisko siebie punktów (tzw. pikseli). Głównym parametrem w przypadku grafiki rastrowej jest wielkość bitmapy, czyli liczba pikseli, podawana na ogół jako wymiary prostokąta. Identyczny podział istnieje jeśli weźmie się pod uwagę reprezentację danych w programach komputerowych: 1. Grafika wektorowa — w tym przypadku nazwa moŜe być nieco myląca, poniewaŜ obrazy mogą składać się nie tylko z wektorów (odcinków), ale równieŜ z innych figur geometrycznych. Cechą grafiki wektorowej jest to, Ŝe zapamiętywane są charakterystyczne dla danych figur dane (parametry), np. dla okręgu będzie to środek i promień, dla odcinka współrzędne punktów końcowych, a dla krzywych parametrycznych współrzędne punktów kontrolnych. Program, jeśli musi narysować obraz na urządzeniu (bądź to rastrowym, bądź wektorowym), na podstawie posiadanych danych wygeneruje obraz tych figur – bardzo waŜna zaleta tej reprezentacji to moŜliwość dowolnego powiększania obrazów, bez straty jakości. 2. Grafika rastrowa — do zapamiętania obrazu rastrowego potrzebna jest dwuwymiarowa tablica pikseli nazywana powszechnie bitmapą. Nazwa wzięła się stąd, Ŝe początkowo były rozpowszechnione systemy wyświetlające obrazy czarno-białe, więc w takim przypadku pojedynczy piksel mógł być opisany przez jeden bit. Jednak gdy powszechniejsza stała się grafika kolorowa, piksele zaczęły być opisywane więcej niŜ jednym bitem – wówczas pojawiła się nazwa pixmapy, która jednak nie przyjęła się (chociaŜ jest stosowana np. w X Window). Przewagą reprezentacji wektorowej nad rastrową jest to, Ŝe zawsze istnieje dokładna informacja o tym, z jakich obiektów składa się obraz. W przypadku obrazów bitmapowych tego rodzaju informacja jest tracona i jedyne czego moŜna bezpośrednio się dowiedzieć, to kolor piksela. Istnieją jednak metody, które pozwalają wydobyć z obrazów bitmapowych np. tekst, czy krzywe. W chwili obecnej dominują wyświetlacze rastrowe, więc programy wykorzystujące grafikę wektorową są zmuszone przedstawiać idealne figury geometryczne w skończonej rozdzielczości. Kolejnym kryterium, wg którego klasyfikuje się zastosowania grafiki, jest charakter danych: 1. Grafika dwuwymiarowa (grafika 2D) — wszystkie obiekty są płaskie (w szczególności kaŜdy obraz rastrowy wpada do tej kategorii). 2. Grafika trójwymiarowa (grafika 3D) — obiekty są umieszczone w przestrzeni trójwymiarowej i celem programu komputerowego jest przede wszystkim przedstawienie trójwymiarowego świata na dwuwymiarowym obrazie. Jeszcze jednym kryterium jest cykl generacji obrazu: 1. Grafika nieinterakcyjna — program wczytuje uprzednio przygotowane dane i na ich podstawie tworzy wynikowy obraz. Tak działa np. POV-Ray, który wczytuje z pliku definicję sceny trójwymiarowej i na jej podstawie generuje obraz sceny. 2. Grafika interakcyjna — program na bieŜąco uaktualnia obraz w zaleŜności od działań uŜytkownika, dzięki temu uŜytkownik moŜe od razu ocenić skutki. Bardzo waŜne w tym przypadku jest, Ŝe czas odświeŜenia obrazu nie moŜe być zbyt długi. Dlatego w przypadku grafiki interakcyjnej akceptuje się i stosuje uproszczone metody rysowania obiektów, aby zminimalizować czas oczekiwania. 3. Grafika czasu rzeczywistego — program musi bardzo szybko (kilkadziesiąt razy na sekundę) regenerować obraz, aby wszelkie zmiany były natychmiast uwidocznione. Grafika czasu rzeczywistego ma szczególnie znaczenie w róŜnego rodzaju symulatorach, jest równieŜ powszechna w grach komputerowych. II. Grafika wektorowa Jeden z dwóch podstawowych rodzajów grafiki komputerowej (obok grafiki rastrowej zwanej czasem "bitmapową"). W grafice wektorowej wszelkie obrazy tworzone są za pomocą figur geometrycznych. Jest to grafika generowana w całości komputerowo i nie ma ona bezpośredniego przełoŜenia na obrazowanie obiektów z natury. Wszystko jest tutaj z rozmysłem tworzone od początku przez operatora komputera. U podstawy grafiki wektorowej leŜy linia. Linia ta moŜe być tak krótka, Ŝe stanowić będzie tylko punkt, lub moŜe mieć określoną długość. MoŜe ona być prostym odcinkiem lub zdefiniowaną matematycznie linią krzywą (krzywe Beziera). Wszelkie linie mogą być łączone, a zamykane nimi obszary (lub przynajmniej częściowo nimi otoczone) mogą mieć nadawane atrybuty koloru lub maski (czyli "otworu", przez który widać elementy leŜące pod spodem. Obszary ograniczone liniami mogą mieć jednolity kolor, posiadać wypełnienie gradientowe, mogą być wypełnione paternami (czyli mozaiką powtarzających się regularnie wzorów), mogą wreszcie posiadać częściową przezroczystość. Linie mogą słuŜyć do tworzenia ograniczonych nimi obszarów (same posiadając zerową grubość będą wtedy niewidoczne, lecz będą elementami konstrukcyjnymi), lub mogą posiadać własną grubość, tzw. obrys (ang. stroke) i wtedy same będą stanowić widzialne elementy obrazu. Wreszcie linie mogą słuŜyć do innych celów, jak np. być liniami odniesienia przy przekształceniach geometrycznych. Grafikę wektorową nazywa się równieŜ grafiką obiektową, gdyŜ obraz w tej grafice składa się ze stosu elementów ułoŜonych w odpowiedniej kolejności. Jeszcze inną nazwą g. wektorowej jest grafika ilustracyjna, gdyŜ ten rodzaj grafiki nadaje się idealnie do tworzenia ilustracji (kopiowanie z natury zdjęć i innych elementów jest domeną grafiki bitmapowej). Za swoistą odmianę grafiki wektorowej naleŜy uwaŜać fonty, które obecnie w przytłaczającej większości budowane są według tych samych zasad co grafika wektorowa. Grafika wektorowa jest grafiką w pełni skalowalną, co oznacza, iŜ moŜna obrazy wektorowe powiększać oraz zmieniać ich proporcje bez uszczerbku dla jakości. Dzieje się tak dzięki całkowicie matematycznemu opisowi elementów graficznych. Zmianie ulegną tylko wstawiane do pliku z gafiką wektorową obiekty bitmapowe (umieszczanie "wektorów" w bitmapie jest niemoŜliwe). Najpopularniejsze programy do tworzenia grafiki wektorowej to: CorelDRAW, Adobe Illustrator, Macromedia Freehand, Xara, Inkscape (patrz SVG) oraz Sodipodi. W odróŜnieniu od grafiki rastrowej, istnieje bardzo niewiele uniwersalnych (zewnętrznych) formatów plików przechowujących grafikę wektorową. Praktycznie są to jedynie EPS oraz PDF. Wszelkie inne formaty zachowywania grafiki wektorowej to formaty wewnętrzne poszczególnych programów wektorowych. Jednak w ostatnim czasie coraz większą popularność zdobywa promowany przez W3C, oparty na XML format SVG. Obrazy w grafice wektorowej moŜna łatwo przetwarzać w obrazy bitmapowe podając jedynie docelową rozdzielczość obrazu. W drugą stronę - operacja przetworzenia "bitmapy" w "wektor" (wektoryzacja, trasowanie) jest niezmiernie trudna i dotyczy tylko prostych elementów graficznych, lub tworzenia obrysów wyraźnych, kontrastowych motywów obrazu bitmapowego. III. Grafika rastrowa Obraz grafiki rastrowej jest plikiem reprezentującym pionowo-poziomą siatkę odpowiednio kolorowanych pikseli na monitorze komputera, drukarce lub innym urządzeniu wyjściowym. Kolor kaŜdego piksela jest definiowany osobno. Obrazki z głębią kolorów RGB często składają się z kolorowych pikseli zdefiniowanych przez trzy bajty - jeden bajt na kolor czerwony, jeden na zielony i jeden na kolor niebieski. Mniej kolorowe obrazki potrzebują mniej informacji na piksel, np. obrazek w kolorach czarnym i białym wymaga tylko jednego bitu na kaŜdy piksel. Grafika rastrowa róŜni się od wektorowej tym, Ŝe grafika wektorowa pokazuje obraz uŜywając obiektów geometycznych takich, jak krzywe, czy poligony. Bitmapę charakteryzują następujące podstawowe właściwości: * wysokość i szerokość bitmapy liczona jako liczba pikseli * liczba bitów na piksel opisująca liczbę moŜliwych do uzyskania kolorów. Kolorowa grafika rastrowa zwykle zawiera piksele z jednym do ośmiu bitów dla kaŜdego z kolorów bazowych. Jakość obrazka rastrowego jest określana przez całkowitą liczbę pikseli (wielkość obrazu) oraz ilości informacji przechowywanych w kaŜdym pikselu (głębia koloru). Na przykład obrazek zapisujący 24 bity informacji o kolorze (standard dla większości wyświetlaczy w 2004 roku) moŜe pokazać łagodniejsze cieniowanie od obrazka zapisującego jedynie 15 bitów informacji na jeden piksel, ale teŜ nie pokaŜe łagodniejszego obrazka od zapisującego 48 bitów na piksel. Podobnie, obrazek o wymiarach 640 x 480 pikseli (zawierający ok. 307 tys. pikseli) będzie wyglądał nierówno i chropowato w porównaniu do obrazka o wymiarach 1280 x 1024 (ponad 1,3 mln pikseli). PoniewaŜ taka ilość danych zajmuje ogromną powierzchnię, często stosuje się technikę kompresji danych celem zmniejszenia wielkości zajmowanego miejsca. Niektóre techniki zamieniają (zmniejszają, usuwają) pewne informacje, aby uzyskać mniejszy plik. Niestety nie są to bezstratne metody kompresji. Przykładami takich kompresji są kompresje JPEG, GIF, PNG. Wielkość obrazka rastrowego nie moŜe zostać zmieniona bez utraty jego jakości. Jest to przeciwne grafice wektorowej, którą łatwo moŜna skalować, dostosowując jej wielkość do urządzenia, na którym jest wyświetlany obraz. Grafika rastrowa jest bardziej uŜyteczna od wektorowej do zapisywania zdjęć i realistycznych obrazów, podczas gdy grafika wektorowa jest częściej uŜywana do obrazów tworzonych z figur geometrycznych oraz prezentacji tekstu (w tym tabel i wzorów). Aktualnie większość komputerowych monitorów wyświetla od 72 do 130 pikseli na cal (PPI), podczas gdy drukarki mogą drukować materiały w rozdzielczości 1200 punktów na cal (DPI) lub wyŜszej. Ustalenie najbardziej właściwej rozdzielczości obrazka dla danej rozdzielczości drukarki moŜe być bardzo trudne, gdyŜ dokument drukowany moŜe zawierać większą liczbę detali (moŜe mieć większą rozdzielczość) niŜ ten, który jest wyświetlany na ekranie monitora. Grafika rastrowa została opantentowana pierwszy raz przez firmę Texas Instruments w latach 70-tych i jest teraz wszechobecna. IV. Grafika dwuwymiarowa Grafika dwuwymiarowa. Termin ten moŜe się odnosić zarówno do działu informatyki zajmującego się grafiką dwuwymiarową i technikami dotyczącymi jej obróbki, jak i do samych obrazów cyfrowych mogących składać się z tekstu, grafiki oraz obiektów 2D. Grafika dwuwymiarowa jest wykorzystywana głównie w tych zastosowaniach, w których pierwotnie uŜywano tradycyjnych technologii drukowania oraz rysowania - m.in. typografii, kartografii, kreślarstwie, reklamie, filmie animowanym itp. W tych zastosowaniach dwuwymiarowy obraz jest nie tylko reprezentacją obiektu ze świata rzeczywistego, ale niezaleŜnym elementem, któremu nadano konkretne znaczenie. Dwuwymiarowy model jest w tym wypadku bardziej preferowany, poniewaŜ daje bardziej bezpośrednią kontrolę nad obrazem niŜ model trójwymiarowy, który lepiej odnosi się do fotografii niŜ do typografii. Grafika komputerowa 2D rozpoczęła swój rozwój w latach 50. XX wieku od urządzeń grafiki wektorowej. Z czasem zostały one wyparte przez urządzenia grafiki rastrowej. Język PostScript oraz system X Window były jednymi z najwaŜniejszych projektów w tej dziedzinie. Techniki związane z techniką 2D Grafika 2D moŜe zawierać w sobie modele geometryczne (nazywane grafiką wektorową), obrazy cyfrowe (nazywane grafiką rastrową), tekst (zdefiniowany przez styl i rozmiar czcionki, kolor, pozycję, i orientację), funkcje i równania matematyczne. Składowe te mogą być modyfikowane i manipulowane przez dwuwymiarowe transformacje geometryczne takie jak translacja, rotacja, skalowanie. W grafice obiektowej, obraz jest opisywany pośrednio przez obiekt stosujący metodę autorenderingu - procedurę, która ustala kolory pikseli obrazu poprzez bezwzględny algorytm. ZłoŜone modele tworzy się z połączenia prostszych obiektów, tak jak w przypadku programowania obiektowego. Rysowanie bezpośrednie Wygodnym sposobem aby stworzyć złoŜony obraz jest rozpoczęcie pracy od pustego obrazu (canvas) - mapy rastrowej (jest to tablica pikseli - bitmapa lub pixmapa jeśli obraz jest kolorowy) wypełnionej jakimś jednolitym kolorem tła - następnie "rysowanie", "malowanie" lub "wklejanie" prostych kolorowych fragmentów obrazu w określonym porządku. W szczególnych przypadkach obraz moŜe być przedstawiany jako bufor ramki. Niektóre programy ustawiają kolory pikseli bezpośrednio w pamięci karty graficznej, jednak większość opiera swe działanie na którejś z bibliotek graficznych 2D. Biblioteki te zazwyczaj implementują następujące operacje graficzne: * wklejenie zadanego obrazu w zadanym miejscu na płótnie; * wypisanie odpowiednią czcionką i pod odpowiednim kątem ciągu znaków w zadanym miejscu; * rysowanie prostych figur geometrycznych - np. trójkąta przy zdefiniowanych trzech wierzchołkach, lub okręgu przy zdefiniowaniu jego środka oraz promienia; * rysowanie linii prostych, łuków, krzywych za pomocą wirtualnego pióra o zadanej grubości. Rozszerzone modele barw Tekst, kształty i linie są renderowane kolorem określonym przez klienta. Wiele bibliotek i kart dostarcza kolorowych gradientów, które są pomocne przy wyświetlaniu tła z przejściami tonalnymi między kolorami, efektów cieniowania, itp. (zobacz takŜe cieniowanie Gourauda). Kolory piksela mogą być takŜe pobrane z tekstury, np. z obrazu cyfrowego. Namalowanie piksela danym kolorem zazwyczaj zastępuje poprzedni kolor. JednakŜe, wiele systemów pozwala na malowanie przezroczystymi kolorami, które tylko modyfikują wartość poprzedniego piksela. Dwa kolory mogą równieŜ być wymieszane w bardziej wyszukany sposób, np. poprzez wykonanie na nich bitowej operacji XOR. Ta technika, znana jako odwracanie kolorów (negatyw) jest często uŜywana w interfejsach graficznych (np. w okienkach) do podświetlania elementów, a takŜe innych zastosowań, gdy potrzebne jest zaznaczenie części rysunku bądź interfejsu tylko na chwilę - ponowne wykonanie na tych pikselach operacji XOR przywróci oryginalny jego kolor. Warstwy Modele rysowania 2-wymiarowej grafiki komputerowej nie mają moŜliwości tworzenia kształtów 3-wymiarowych oraz stosowania takich efektów charakteryzujących przestrzeń trójwymiarową, jak oświetlenie, cienie, odbicia, załamania fal świetlnych itp. JednakŜe istnieje moŜliwość nałoŜenia na obraz 2D wielu róŜnorodnych warstw, czyli czegoś w rodzaju kartki lub półprzezroczystej bądź przezroczystej folii ułoŜonych na sobie w odpowiedniej kolejności. Kolejność ta jest zwykle zdefiniowana przez pojedynczą liczbę - połoŜenie warstwy lub jej odległość od obserwatora. Grafika zawierająca warstwy jest czasem nazywana grafiką 2-i-półwymiarową. Taka technika pozwala na wykorzystanie podobnych moŜliwości, co w przypadku obróbki obrazu na papierze oraz półprzezroczystych foliach. MoŜliwe jest wycinanie oraz wklejanie elementów na pojedynczych warstwach nie zmieniając pozostałych warstw. Z tych powodów są one uŜywane w większości edytorów graficznych. Modele warstwowe pozwalają takŜe na lepszy antyaliasing bardziej złoŜonych obrazów. Warstwy umoŜliwiają uŜytkownikowi na pozostawianie lub usuwanie niepotrzebnych informacji podczas przeglądania bądź drukowania róŜnego rodzaju dokumentów, np. pozwalają na usunięcie dróg bądź torów kolejowych z map, ścieŜek ze schematów układów elektronicznych, bądź odręcznych notatek w jakimś dokumencie. Końcowy obraz jest tworzony poprzez "malowanie" bądź "wklejanie" kaŜdej z warstw na początkowo czysty obraz, zgodnie z kolejnością połoŜenia kaŜdej z warstw. KaŜda warstwa jest najpierw renderowana jako pojedynczy obraz, a następnie tak wyrenderowany obraz jest malowany piksel po pikselu na obrazie docelowym. Jeśli część warstwy jest przezroczysta, ta część nie jest oczywiście malowana. Renderowanie i malowanie moŜe odbywać się równolegle, tzn. piksel kaŜdej z warstw moŜe być malowany od razu po tym jak zostanie wyrenderowany. Jeśli warstwa zawiera bardziej złoŜone obiekty geometryczne - takie jak tekst, krzywe - moŜe być rozbita na prostsze elementy, np. pojedyncze litery w przypadku tekstu, bądź odcinki linii prostych. Następnie są one malowane jako osobne warstwy, w odpowiedniej kolejności. To rozwiązanie jednak moŜe doprowadzić do utworzenia niepoŜądanych efektów w obrazie, gdy dwa elementy będą musiały zostać namalowane na jednym pikselu. Sprzęt grafiki 2D Nowoczesne karty graficzne w przewaŜającej większości wykorzystują technologie rastrowe dzieląc ekran na siatkę pikseli - jest to prostsza i tańsza technologia od tej wykorzystywanej w sprzęcie do grafiki wektorowej. Do klasycznych procesorów graficznych 2D z końca lat 70. i początku lat 80., wykorzystywanych w 8-bitowych konsolach gier wideo i domowych komputerach, naleŜą: * ANTIC firmy Atari's (właściwie GPU 2D), TIA, CTIA oraz GTIA * układy w Technologii MOS firmy Commodore - VIC oraz VIC-II Oprogramowanie grafiki 2D Wiele graficznych interfejsów uŜytkownika (GUI), takich jak te zawarte w systemach Mac OS, Microsoft Windows lub X Window System, są bazowane na grafice dwuwymiarowej. Oprogramowanie to pozwala uŜytkownikowi za pomocą interfejsu graficznego wejść w interakcję z komputerem. Zwykle menedŜer okien logiczne oddziela interfejsy poszczególnych uruchomionych aplikacji, umieszczając je w osobnych oknach oraz umoŜliwiając uŜytkownikowi w prosty sposób przejście w kaŜdej chwili z jednej aplikacji do drugiej. Dwuwymiarowy interfejs uŜytkownika jest w pewnym sensie naturalnym rozwiązaniem, chociaŜby z tego powodu, Ŝe najwaŜniejsze urządzenia wejścia, jak mysz komputerowa ma swobodę ruchów ograniczoną do dwóch wymiarów. Grafika dwuwymiarowa jest intensywnie wykorzystywana w róŜnych urządzeniach peryferyjnych takich jak: drukarki, plotery, itp., a takŜe w większości gier wideo oraz komputerowych wydanych w XX wieku. Jest teŜ wykorzystywana w prostych grach karcianych i planszowych - solitaire, szachy, mahjongg, i wiele innych... Edytory grafiki 2D są programami do tworzenia obrazów, diagramów oraz ilustracji poprzez bezpośrednie manipulowanie (za pomocą myszy, tabletu lub podobnego urządzenia) prostymi elementami grafiki. Edytory te zwykle umoŜliwiają edycję zarówno figur geometrycznych jak i obrazów cyfrowych. Obraz taki jest zwykle reprezentowany jako model warstwowy o strukturze hierarchicznej dla uproszszczenia procesu edycji. Wynikiem pracy takich programów jest plik graficzny, gdzie poszczególne warstwy i figury geometryczne są zapisane w ich oryginalnej postaci. Jednym z pierwszych programów, które moŜna zaliczyć do zaprezentowanej grupy, jest MacDraw, wydany w roku 1984, razem z linią komputerów Macintosh. Do najnowszych przedstawicieli tej grupy moŜna z kolei zaliczyć Adobe Illustrator, CorelDraw oraz darmowy edytor xfig. Jest takŜe wiele edytorów wyspecjalizowanych w specyficznych zastosowaniach, jak diagramy elektryczne, elektroniczne oraz VLSI, mapy topograficzne, fonty komputerowe, itp. V. Grafika trójwymiarowa Nazwa jednej z dziedzin grafiki komputerowej zajmującej się głównie wizualizacją obiektów trójwymiarowych. Nazwa pochodzi od angielskiego sformułowania Three-Dimensional Graphics. GEOMETRIA Geometria obiektów trójwymiarowych moŜe być reprezentowane na kilka sposobów: * Siatka wielokątów – obiekt jest budowany z płaskich wielokątów (najczęściej trójkątów lub czworokątów), które mają wspólne wierzchołki i krawędzie. W ten sposób moŜna tworzyć proste bryły, albo – jeśli siatka jest dostatecznie gęsta – dobrze przybliŜać skomplikowane obiekty. * Voxele (woksele) – obiekt jest budowany z elementarnych sześcianów (trójwymiarowych pikseli). Tego rodzaju reprezentacja jest rozpowszechniona szczególnie w diagnostyce medycznej, gdzie uzyskuje się szereg przekrojów (obrazów bitmapowych) ciała pacjenta i na ich podstawie tworzy trójwymiarowe modele. * Opis matematyczny – obiekty są określone równaniami. Mogą to być np. kule, płaszczyzny, oraz szczególnie uŜyteczne i powszechnie stosowane powierzchnie parametryczne (płaty powierzchni), np. powierzchnie Beziera, Hermite'a czy NURBS. Dane trójwymiarowe mogą zostać pobrane ze świata rzeczywistego, np. za pomocą wspomnianych tomografów komputerowych, skanerów trójwymiarowych, ze zdjęć satelitarnych (topografia terenów) a takŜe ze zdjęć stereoskopowych. W animacji komputerowej wykorzystywana jest równieŜ technika motion capture, która polega na nagrywaniu ruchu człowieka – czujniki połoŜenia umieszczane są w kluczowych punktach ciała: na rękach, nogach, głowie, karku itp. Przeniesienie nagranych w ten sposób ruchów na sztuczne postacie nadaje ich ruchom naturalność, trudną do uzyskania klasycznymi metodami animacji. Obiekty trójwymiarowe mogą równieŜ zostać stworzone przez człowieka w procesie modelowania. DuŜe znaczenie mają teŜ techniki komputerowe, które automatycznie modelują skomplikowane efekty (takie jak dym, ogień, śnieg, deszcz) i obiekty (chmury, góry, drzewa). WIZUALIZACJA PoniewaŜ obecnie wszystkie urządzenia komputerowe wyświetlają dwuwymiarowe obrazy, dlatego z grafiką trójwymiarową związana jest bezpośrednio geometria wykreślna. Głównie w zastosowaniach inŜynierskich (CAD) sceny trójwymiarowe przedstawione są w rzucie prostokątnym, natomiast w pozostałych w rzucie perspektywicznym. Efekty wizualny rzutu perspektywicznego (skrót perspektywiczny) jest bardzo podobny do efektów obserwowanych w fotografii oraz w systemie wzrokowym człowieka. Przez analogię do aparatu fotograficznego (lub kamery), w grafice trójwymiarowej istnieje pojęcie wirtualnej kamery, która tworzy „zdjęcie” sceny istniejącej w pamięci komputera. Kamerę wirtualną charakteryzują następujące parametry: połoŜenie, kierunek w jakim jest skierowana oraz ogniskowa – mają one swoje odbicie w matematycznym modelu kamery. Obrazy trójwymiarowe są tworzone głównie w technice rastrowej, wektorowo przedstawia się co najwyŜej obrysy, szkice itp. Głównym problemem w obu przypadkach jest wyznaczanie powierzchni widocznych, a więc selekcja tych obiektów (lub ich części), które są widoczne w danym rzucie. Robi się to np. za pomocą bufora Z, sortowania względem głębokości, śledzenia promieni. Ponadto przewaŜnie obserwujemy niewielki fragment sceny, a dodatkowo scena moŜe składać się z wielkiej liczby obiektów (sięgającej nawet setek milionów), dlatego równie waŜne jest określenie, które obiekty mogą być widoczne, aby przetwarzać tylko te dane, które naprawdę są potrzebne. Zobacz: usuwanie niewidocznych powierzchni. REALIZM Realizm obrazów generowanych przez komputer jest w większości zastosowań bardzo waŜny. Aby go uzyskać modeluje się oświetlenie: definiuje światła, powierzchniom obiektów trójwymiarowych nadaje kolor i fakturę, określa cienie rzucane przez obiekty, odbicia zwierciadlane, załamanie i rozpraszanie światła itd., itp. Metody, które pozwalają na bardzo dokładne przedstawienie scen trójwymiarowych są równieŜ bardzo kosztowne obliczeniowo (np. raytracing, radiosity). Z kolei szybkie, przybliŜone metody cieniowania obiektów, tworzenia cieni, odbić zwierciadlanych są z powodzeniem wykorzystywane w grach komputerowych. W przypadku animacji waŜne jest takŜe aby ruch obiektów, był moŜliwie najbardziej zbliŜony do zachowania przedmiotów w świecie rzeczywistym. VI. Grafika 2,5D Potoczne określenie systemów generujących grafikę, które próbują wywołać złudzenie trójwymiarowości, operując dwuwymiarowymi zestawami tzw. sprite'ów. Sprite dwuwymiarowy obrazek uŜywany w systemach grafiki dwuwymiarowej i 2.5-wymiarowej, który po przesunięciu i ewentualnie przeskalowaniu jest przenoszony na ekran. Sprite'y pozwalają na bardzo łatwe uzyskiwanie na ekranie niezbyt wyszukanych obiektów animowanych. Wiele układów graficznych 2D jest wyposaŜonych w zdolność do automatycznego generowania i animacji sprite'ów. Namiastkę trzeciego wymiaru moŜna uzyskać przez skalowanie sprite'ów oraz ich wyświetlanie w kolejności od dalszych do bliŜszych (w ten sposób bliŜsze częściowo zakrywają dalsze). W systemach grafiki 3D zamiast sprite'ów uŜywa się raczej modeli opartych na wielokątach, chociaŜ moŜna je spotkać jako element efektów specjalnych np. w wyścigach, moŜe to być dym z opon. VII. Popularne biblioteki graficzne DIRECTX DirectX to zestaw funkcji API wspomagających generowanie grafiki (dwu i trójwymiarowej), dźwięku oraz innych zadań związanych zwykle z grami i innymi aplikacjami multimedialnymi. Najcześciej wykorzystywane do obsługi grafiki w grach komputerowych. UŜywane równieŜ do pisania programów do specyficznych zadań z wykorzystaniem grafiki trójwymiarowej. DirectX jest produktem firmy Microsoft, dostepny tylko na platformę Windows oraz konsolę Xbox. Obecnie dostępna jest wersja DirectX 9.0. Kolejna wersja, DirectX 10, ma zostać udostępniona wraz z premierą systemu operacyjnego Microsoft Windows Vista. Komponenty DirectX DirectX składa się z szeregu komponentów odpowiedzialnych za realizację poszczególnych funkcji aplikacji, a są to: DirectX Graphics, składające się z dwóch pod-komponentów: DirectDraw - obsługuje grafikę rastrową (bitmapową), Direct3D (D3D) - obsługuje grafikę 3D, DirectInput - przetwarza dane pochodzące z klawiatury, myszy, joysticka lub innych kontrolerów. DirectPlay - wykorzystywany w grach sieciowych, DirectSound - słuŜy do odtwarzania i nagrywania dźwięku, DirectMusic - odtwarza muzykę stworzoną przy uŜyciu programu DirectMusic Producer, DirectShow - słuŜy do odtwarzania plików audio i wideo, DirectSetup - obsługuje instalację poszczególnych komponentów DirectX DirectX Media Objects - spełnia podobne zadania, jak DirectShow. GD GD jest biblioteką graficzną słuŜącą do dynamicznej manipulacji obrazami. Jej głównym twórcą jest Thomas Boutell. Dzięki niej moŜna tworzyć obrazy w formatach GIF, JPEG, PNG i BMP. GD obsługuje m.in. takie języki programowania jak C, PHP, Perl, OCaml, Tcl, Pascal czy REXX. OPENGL OpenGL (ang. Open Graphics Library) - specyfikacja uniwersalnego API do generowania grafiki. Zestaw funkcji składa się z 250 podstawowych wywołań, umoŜliwiających budowanie skomplikowanych trójwymiarowych scen z podstawowych figur geometrycznych. OpenGL wykorzystywany jest często przez gry komputerowe, spełnia rolę analogiczną, jak konkurencyjny Direct3D (część DirectX) w systemie Windows firmy Microsoft. RównieŜ programy do przedstawiania wyników badań naukowych, CAD, oraz wirtualnej rzeczywistości uŜywają OpenGL. OpenGL, podobnie jak np. X Window System, działa w architekturze klient-serwer. Klientem, w tym przypadku, jest aplikacja wykorzystująca OpenGL, która zleca operacje graficzne do wykonania, a serwerem - aktualnie uŜywana implementacja OpenGL (np. w sterowniku karty graficznej). Zwykle, klient i serwer znajdują się na tej samej maszynie, jednak nie jest to konieczne - biblioteka zaprojektowana tak, aby moŜliwe było np. wyświetlanie grafiki OpenGL na zdalnym terminalu. Jednocześnie, na skutek zastosowania zunifikowanego protokołu komunikacji, wyświetlanie moŜe odbywać się na zupełnie innej platformie, niŜ ta, na której działa aplikacja. Jedną z podstawowych cech OpenGL jest to, Ŝe jest on maszyną stanu. Na stan OpenGL w danym momencie składa się szereg parametrów i trybów działania, które moŜna ustawić lub zapamiętać na stosie i później odtworzyć. Ich konfiguracja będzie miała bezpośredni lub pośredni wpływ na otrzymany rezultat renderingu. Raz ustawiony parametr lub tryb działania pozostaje zachowany aŜ do następnej zmiany. Przykładami takich parametrów mogą być: kolor rysowania, aktualnie uŜywana tekstura, sposób działania bufora z, macierz, na której wykonywane są aktualnie operacje, oraz wiele innych. Część z parametrów moŜe być włączana lub wyłączana w sposób bardzo oczywisty, tzn. poprzez wywołanie funkcji glEnable() lub glDisable() (w tłumaczeniu brzmiałoby to: glWłącz() oraz glWyłącz()), a inne ustawiane są poprzez wykonanie powiązanych z tymi parametrami funkcji (np. glBindTexture() - ustawienie aktywnej tekstury). Dzięki funkcji glPushAttrib() moŜliwe jest zapamiętanie na stosie części lub całości aktualnego stanu OpenGL w zaleŜności od przekazanego jej argumentu. Funkcja odwrotna, czyli glPopAttrib() nie wymaga Ŝadnych argumentów, gdyŜ pobiera ze szczytu stosu taki stan jaki został wcześniej zapamiętany. PYTANIA KONTROLNE 1. Wymień kilka zastosowań grafiki komputerowej 2. Co to jest „grafika interakcyjna”?? 3. Co to są „warstwy” w grafice 2D?? 4. Co to są „voxele”?? 5. Omów krótko Sprite-a w grafice 6. Z jakiego szeregu komponentów składa się DirectX?? 7. Do czego słuŜy biblioteka GD?? 8. Omów grafike wektorową 9. Omów grafike rastrową 10. Czym zajmuje się dział informatyki o nazwie „Grafika komputerowa”??