Łukasz Grabiec
DirectX bez tajemnic
Jeszcze niedawno nikt nie przypuszczał, że Windows stanie się
dominującą platformą dla gier działających na komputerach osobistych. I to nie tylko
tych prostych z grafiką 2D, ale także bardzo wymagających z rozbudowaną grafiką 3D.
DOS jako
platforma dla aplikacji multimedialnych przestał praktycznie istnieć. Dziś chyba na
palcach jednej ręki można policzyć gry, które pracują w tym systemie. Dlaczego tak
się stało? Bezpośrednia komunikacja aplikacji dosowych ze sprzętem oznacza, że
twórcy gier mają do dyspozycji wydajne i szybkie metody działania. Niestety, DOS, jako
znakowy system operacyjny, nie oferuje żadnego API (Application Programming Interface)
wspomagającego programistów gier. Jeśli ktoś pisze program w tym systemie, sam musi
zatroszczyć się o obsługę danego urządzenia, np. karty graficznej czy karty
dźwiękowej. Dla każdego z nich trzeba napisać odpowiedni program obsługi. Tę
niedogodność postanowił zniwelować Microsoft. Wraz z ekspansją systemu Windows 95
firma z Redmond wprowadziła zestaw bibliotek multimedialnych pod wspólną nazwą
DirectX. Składa się on z następujących komponentów:
lDirectDraw - podstawowy moduł grafiki 2D, l
lDirect3D - moduł grafiki 3D, l
lDirectSound - moduł obsługi dźwięku, l
lDirectMusic - obsługa muzyki (dopiero od wersji 6.0), l
lDirectInput - obsługa urządzeń wejłcia, l
lDirectPlay - obsługa sieci. l
Biblioteka DirecX oferuje zestaw API ułatwiający programowanie gier i aplikacji
multimedialnych w systemie Windows 95/98. Jednak przy wielu jej zaletach, ma jedną,
zasadniczą wadę. Pod względem szybkości działania aplikacja napisana przy użyciu
DirectX ma się tak do aplikacji DOS-a, jak maluch do bolida Formuły 1. Producent sam
jednak ostrzega, iż nie poleca renderingu software'owego, a jedynie z użyciem
specjalizowanych akceleratorów 3D, np. 3Dfx Voodoo 1 lub 2, RIVA 128/TNT, S3 Savage itp.
Stało się jednak tak, że łatwość programowania aplikacji wzięła górę nad
szybkością działania.
Obecnie,
pisząc aplikacje mulitmedialne, jesteśmy skazani na używanie biblioteki Microsoftu. Tym
samym niemożliwe stało się bezpośrednie odwoływanie do sprzętu, np. do rejestrów
karty graficznej. Niewątpliwą zaletą DirectX jest natomiast wykorzystanie podczas
renderingu wszystkich możliwości zainstalowanego sprzętu. Możemy określić, czy
poszczególne funkcje pisanego programu mają być realizowane sprzętowo czy programowo.
Jeśli bowiem np. karta graficzna oferuje sprzętowe wspomaganie renderingu, np: Z-Buffer,
cieniowanie, teksturowanie, to DirectX korzysta z tych wszystkich możliwości.
Odpowiedzialny jest za to mechanizm HAL (Hardware Abstraction Layer).
HAL jest interfejsem dostarczonym przez producenta urządzenia graficznego (na przykład w
postaci biblioteki DLL), używanym przez DirectX do bezpośredniej współpracy z kartą
graficzną. Aplikacja korzystająca z DirectX nigdy nie komunikuje się bezpośrednio z
HAL. Jeśli jakaś funkcja graficzna nie jest wsparta sprzętowo, do gry - dosłownie i w
przenośni - wchodzi mechanizm HEL (Hardware Emulation Layer). Następuje wtedy próba
wykonania danej funkcji software'owo.
Chyba
najważniejszym modułem DirectX (mam na uwadze akceleratory 3D) jest Direct3D. Może on
pracować w dwóch trybach: retained mode i immediate mode. Retained mode jest zbiorem API
wysokiego poziomu, służącym do szybkiego tworzenia multimedialnych aplikacji 3D.
Immediate mode to zbiór API do programowania niskopoziomowego. Ten tryb jest wyśmienity
dla programistów dobrze obeznanych z zagadnieniami grafiki 3D. Może być przydatny np.
dla tych, którzy chcą przenieść swoją aplikację z DOS do Windows 95/98.
(Zależność między retained mode a immediate mode oraz drogę jaką musi przebyć kod
aplikacji ilustruje rys. 1). Niewątpliwą zaletą Direct3D jest możliwość komunikacji
z urządzeniami w sposób niezależny od zainstalowanego sprzętu. Najważniejsze cechy
Direct3D to:
lZ-Buffer, l
lcieniowanie metodą flat i Gourauda, l
lmodel oświetlenia Phonga, l
lteksturowanie grafiniczne, l
lmip mapping, l
llinearne i bilinearne filtrowanie tekstur, l
lteksturowanie z korekcją perspektywy, l
lprzezroczyste tekstury, l
lmgła, l
lantialiasing, l
ldynamiczne oświetlenie, l
ltworzenie własnych materiałów, l
lwsparcie dla procesorów MMX, l
lniezależność sprzętowa, l
a od wersji 6.0 także:
lkompresja tekstur, l
lwielokrotne teksturowanie w jednym przebiegu (single pass multitexturing), l
lteksturowanie wichrujące (bump mapping), l
lwsparcie dla instrukcji 3D procesorów AMD K6-2 3D. l
Według Microsoftu, DirectX 6.0 jest do 60 procent szybszy niż jego poprzednia wersja
zanotowane.pldoc.pisz.plpdf.pisz.plteen-mushing.xlx.pl