Projektowanie aplikacji graficznych dr inż. Jarosław Zubrzycki
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. 2
Finalna czysto 32-bitowa wersja DirectX 9.0c pochodzi z 13 grudnia 2004 roku i ma rozmiar tylko 33.6 MB. Bezpośrednio następujące po niej kolejne uaktualnienie DirectX 9.0c z 9 lutego 2005 już zawiera niewielkie zaczątki technologii 64-bitowej. Obecnie dostępna 64- bitowa wersja DirectX 9.0c ma już około 60 MB i jest zbędna dla użytkowników 32- bitowych Windows. 3
Najczęściej wykorzystywane do obsługi grafiki w grach komputerowych. Używane również do pisania programów do specyficznych zadań z wykorzystaniem np. grafiki trójwymiarowej (np. symulacja komputerowa itp.). DirectX jest produktem firmy Microsoft, dostępny tylko na platformę Windows oraz konsolę Xbox. Obecnie dostępna jest wersja DirectX 10, która została udostępniona wraz z premierą systemu operacyjnego Microsoft Windows Vista. 4
API API (ang. Application Programming Interface) interfejs programowania aplikacji, interfejs programu użytkownika specyfikacja procedur, funkcji lub interfejsów umożliwiających komunikację z biblioteką, systemem operacyjnym lub innym systemem zewnętrznym w stosunku do aplikacji korzystającej z API. 5
API Dobry interfejs API tworzony jest nie tylko z myślą o ułatwieniu procesu tworzenia oprogramowania programistom poprzez dobrą dokumentację oraz ukrycie szczegółów implementacyjnych, ale także z myślą o użytkowniku, dzięki zagwarantowaniu podobnego interfejsu wszystkim aplikacjom opartym o dany API. Jako przykłady API można podać międzynarodowy standard POSIX, a także opracowany przez Microsoft interfejs Win32 API. 6
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 podkomponentó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. 7
Komponenty DirectX 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. 8
DirectX Graphics DirectX Graphics jest to połączenie Direct3D i DirectDraw w bibliotece DirectX firmy Microsoft. Direct3D jest komponentem biblioteki DirectX zajmującym się wyświetlaniem grafiki trójwymiarowej. Umożliwia wykorzystanie funkcji rysowania obiektów 3D oferowanych przez karty graficzne. 9
DirectX Graphics Pierwotnie struktura Direct3D różniła się od standardu OpenGL, ale z biegiem czasu jej budowa coraz bardziej zaczynała go przypominać. Direct3D jak i cały pakiet DirectX jest oparty na interfejsach COM, co oznacza, że programista musi tworzyć wskaźniki do klas i potem z nich korzystać. Jest to dość zawiła operacja, która dodatkowo zmniejsza czytelność kodu programu. Microsoft odchodzi od modelu COM i chce przyjąć rozwiązania zawarte w OpenGL, które opierają się na funkcjach i przepuszczaniu przez nie zmiennych. Takie rozwiązanie daje znacznie bardziej czytelny kod, co wpływa na zmniejszenie trudno wykrywalnych drobnych błędów, ale również na niewielki spadek wydajności 10
DirectX Graphics Direct3D jest użyteczny przede wszystkim przy pisaniu aplikacji pracujących na platformach Windows oraz Xbox i Xbox 360 ze względu na brak wersji DirectX firmy Microsoft dla innych systemów operacyjnych. Mimo to możliwe jest uruchamianie aplikacji Direct3D pod systemami operacyjnymi z rodziny Unix, dzięki implementacji kluczowych API Microsoftu dla tych systemów. 11
DirectX Graphics DirectDraw jest to interfejs służący do wyświetlania grafiki 2D używając akceleracji sprzętowej o ile jest dostępna. DirectDraw nie obsługuje grafiki 3D - 12
DirectInput DirectInput jest to biblioteka obsługująca urządzenia wejściowe tj. klawiatura, mysz czy joystick. Zawiera w sobie funkcje odczytujące dane z tych urządzeń w różny sposób (bezpośredni lub buforowany). Ma też możliwość przyporządkowania określonych akcji do konkretnych przycisków (tzw. Action Mapping). 13
DirectPlay DirectPlay jest protokołem stosowanym przede wszystkim w grach sieciowych. Za jego pomocą możliwe jest wykorzystywanie protokołów TCP/IP i starszych np. IPX/SPX do nawiązywania połączeń pomiędzy użytkownikami sieciowymi tej samej aplikacji. 14
DirectSound DirectSound służy do odtwarzania i nagrywania dźwięku. dostarcza bezpośredni interfejs między programami użytkowymi i sterownikami karty dźwiękowej na MS Windows, umożliwiając programom użytkowym wyprodukowanie dźwięków i muzyki. 15
DirectSound Oprócz dostarczania istotną usługa przesyłania danych audio do karty dźwiękowej, daje to wiele potrzebnych zdolności takich jak nagranie i mieszanie dźwięku; dodawanie efektów brzmieniowych np. powtórzenia, echo; używanie sprzętowo kontrolowanych buforów dla dodatkowej szybkości, ustawienie dźwięku w przestrzeń 3D (3D audio spatialization), przechwytywanie dźwięku z mikrofonu lub innego wejścia i kontrolowanie przechwytywania podczas nagrywania ścieżki audio. 16
DirectSound3D DirectSound3D (DS3D) jest dodatkiem do systemu MS DirectX, który jest przeznaczony do standaryzowania dźwięku 3D pod Microsoft Windows. Został wprowadzony wraz z DirectX3 w 1996. 17
DirectSound3D DirectSound3D pozwala producentom oprogramowania napisać jeden standardowy dźwięk klasy API zamiast pisać kody dla każdego producenta karty dźwiękowej. W DirectX 5, DirectSound3D miał możliwość wygenerowania z karty dźwiękowej dźwięk przestrzenny dzięki algorytmom przyspieszającym DirectSound3D przyjetych przez Microsoft. 18
DirectSound3D Eliminuje to potrzebę tworzenia oddzielnych bibliotek audio 3D. Począwszy od DirectX 8, DirectSound i DirectSound3D (DS3D) połączono w jedną całość i nazwano DirectX Audio. 19
DirectMusic DirectMusic jest integralną częścią składową Microsoft DirectX API, który pozwala muzyce i efektom dźwiękowym zostać skomponowanym i granym. Dostarcza elastyczną interaktywną kontrolę pomimo tego, jak są zagrane. Architektonicznie DirectMusic jest zaawansowanym zbiorem przedmiotów, utworzonych na DirectSound, który pozwala na to, by zagrać dźwięk i muzykę bez potrzeby korzystania z niskopoziomowego programowania jak DirectSound. 20
DirectMusic DirectSound uwzględnia przechwytywanie i playback cyfrowych próbek dźwięku, podczas gdy DirectMusic pracuje w oparciu o dane muzyczne. Muzyka może zostać zsyntetyzowana albo w sprzęcie komputerowym, albo w Microsoft Software Synthesizer, lub w syntezatorze użytkownika. 21
DirectShow DirectShow jest technologią programistyczną umożliwiającą obsługę strumieni wideo i audio na platformach Microsoft Windows. 22
DirectShow Zastosowanie Technologia DirectShow stosowana jest w aplikacjach multimedialnych wykorzystujących strumienie wideo i audio. Umożliwia między innymi odtwarzanie plików medialnych, pobieranie obrazu i dźwięku z urządzeń zewnętrznych takich jak kamery cyfrowe i karty telewizyjne, kodowanie/dekodowanie strumienia oraz dostęp do przesyłanych danych (poszczególnych klatek wideo) i ich przetwarzanie. 23
DirectShow Zastosowanie DirectShow obsługuje większość popularnych typów plików medialnych (m.in. AVI, WAV, ASF, MIDI) oraz formatów kompresji (np. DV, MPEG-1, MPEG-4 część 2, MPEG Audio Layer-3 (MP3)). 24
DirectShow Istotną zaletę technologii DirectShow stanowi jej generyczna architektura. Z punktu widzenia zarówno użytkownika jak i programisty nieistotny jest format kompresji zastosowany w odtwarzanym pliku; dobór odpowiednich narzędzi do przetwarzania (w tym wypadku dekodowania) strumienia odbywa się automatycznie. 25
Co więcej, na pewnym etapie drugorzędne staje się, czy dane pochodzą z pliku czy z urządzenia zewnętrznego oraz z jakim typem urządzenia mamy do czynienia. Taką elastyczność udało się uzyskać dzięki zastosowaniu technologii Component Object Model (COM), w której obiekty reprezentowane są przez niezależne moduły wykonujące określone działania na danych. W DirectShow moduły te noszą nazwę filtrów. 26
Filtry DirectShow Filtr jest obiektem wykonującym pewną określoną operację na strumieniu mediów, taką jak odczytanie strumienia z dysku lub kamery podłączonej do komputera, przetworzenie strumienia lub jego wizualizację na ekranie. Filtry pobierają lub zwracają dane i mogą łączyć się ze sobą tworząc graf filtrów. W ten sposób dowolne działanie na strumieniu mediów może być zrealizowane poprzez zbudowanie odpowiedniego grafu i do tego głównie sprowadza się programowanie DirectShow. 27
Filtry DirectShow Filtry DirectShow zostały podzielone na 3 główne kategorie: filtry źródłowe (ang. Source filters) - umożliwiające odczyt strumienia z dysku lub pobranie go z kamery, filtry przetwarzające (ang. Transform filters) - umożliwiające przetwarzanie danych, filtry renderujące (ang. Renderer filters) - kończące pracę z danymi. Filtry te mogą wyświetlić wideo na ekranie, przesłać dźwięk do karty dźwiękowej lub zapisać dane na dysk. 28
Każdy filtr zawiera jeden lub więcej pinów - obiektów, za pomocą których filtry łączą się ze sobą i przekazują dane. Piny dzielą się na wejściowe i wyjściowe. Piny wejściowe pobierają dane, piny wyjściowe przekazują je kolejnym filtrom. Piny wyjściowe mogą łączyć się jedynie z pinami wejściowymi. Dodatkowym warunkiem połączenia dwóch pinów jest ustalenie wspólnego typu przesyłanych danych. 29
Istotną cechą DirectShow jest możliwość tworzenia przez programistów własnych filtrów. Filtry takie mają postać biblioteki DLL. Po zarejestrowaniu ich w systemie mogą być wykorzystane w różnych aplikacjach. DirectShow ułatwia tworzenie filtrów przy pomocy istniejących klas bazowych (ang. Base Classes). 30
DirectSetup DirectSetup jest częścią biblioteki DirectX firmy Microsoft. Zawiera funkcje służące do instalacji komponentów DirectX, jak również do sprawdzania zainstalowanej wersji. 31
DirectX Media Objects DirectX Media Objects (DMO) są to komponenty COM działające podobnie do DirectShow. Służą do strumieniowego przesyłania i przetwarzania danych z wejścia do wyjścia. Zwykle są to interfejsy kodeków służące do przetwarzania danych multimedialnych. Dzięki swojej budowie DMO są łatwiejsze do zaimplementowania niż DirectShow. 32