Dlaczego DirectX jest fajny?

Hej!

W tej notce postaram sie zaprezentowac swoj punkt widzenia na temat DirectXa, jego przewagi nad OpenGLem (jesli chodzi o Windowsa ofc ;), przedstawie zalety tej biblioteki w porownaniu do Ogla i, mam nadzieje, pomoge dokonac trafnego wyboru kazdemu niezdecydowanemu ktory to czyta.

Przyjelo sie sadzic, iz OpenGL jest latwiejszy. Po czesci jest to prawda – mamy glBegin/End, glRotatef,Translatef,Scalef (itp) i zycie wydaje sie proste. Niestety, przychodzi moment, w ktorym przestaje to wystarczac i trzeba zaczac uzywac Vertex Arrays (odpowiednik DXowego DrawPrimUP) albo buforow wierzcholkow – DirectX to prawie ze „wymusza”, ale OGL niestety nie – zostawiajac przyzwyczajenia. Rowniez operacje na macierzach – w DXie to koniecznosc, co zmusza adepta grafiki do nauki podstaw matematyki. OpenGL znowuz przyzwyczaja do glTranslatef, ale przyznac trzeba – na poczatku jest latwiejszy od DXa.

W pewnym momencie, przychodzi taki moment, kiedy chcemy pojsc troche dalej niz radosne rysowanie sobie pojedynczych trojkatow albo nawet szescianow. W tym momencie DirectX zaczyna juz zdecydowanie wygrywac, jesli chodzi o prostote i szybkosc pisania. Kazdy programista OpenGL prawdopodobnie ma napisane wlasne klasy parsujace pliki w roznych formatach siatek, tekstur itp.. Watpie, jednak, aby przecietny poczatkujacy lub srednio-zaawanosowany programista byl w stanie napisac samemu, na przyklad, funkcje optymalizujace siatke pod katem efektywnosci Vertex i preVS Cache karty czy siatki progresywne. W DirectX sprawa wyglada prosciej – duzo rzeczy liczy za nas D3DX, my musimy wywolac jedynie kilka funkcji – poczawszy od prostego liczenia normalnych, przez tangenty az do zabaw ze skinningiem, VIMP, czy UV Atlasami. Jedyne, co musimy zrobic, to sczytac sobie dane z .xa, albo wypelnic ID3DXMesh dowolnymi innymi danymi. D3DX nie policzy za nas rowniez binormalnych.

Dostajemy takze do reki kolejne przydatne narzedzie – ID3DXEffect. Ma jednak taka sama funkcjonalnosc jak Cg, a raczej CgFX (ktore mozna stosowac rowniez w OGL i DX8), wiec tutaj nie ma za duzej roznicy. Mozemy, rowniez, uzywac nadal zwyklych shaderow nie polaczonych w efekt.

Warto rowniez wspomniec o loaderach tekstur – rowniez tych w zabawnych formatach i kompresjach (DXTn, floating-point itd.), stosunkowo prostego w uzyciu systemu Precomputed Radiance Transfer, szybkiej i bogatej biblioteki matematycznej, czy „generatora” paskow trojkatow (do niczego juz nie przydatne, ale jest ;) )

Na koniec dodam moze jeszcze, ze wyglosilem tutaj swoja prywatna opinie, nie chce flame’a z tego powodu, blabla ;)

—-

Abstrahujac od tematu, zaczelismy z toxem i reszta teamu pisac Shadowclones. Ja rowniez, razem ze steffanem rozpoczalem nowy projekt, ale o tym kiedy indziej.

W tak zwanym miedzyczasie pisalem sobie rozne nieznane mi dotad efekty graficzne i czytalem duzo o technologiach oswietlenia. Niedawno zaimplementowalem sobie Irradiance Enviroment Maps, a teraz pisze Valve’owe Radiosity Normal Maps.

Pozdrawiam, Charibo :)

Reklamy

~ - autor: charibo w dniu Grudzień 27, 2007.

Komentarzy 5 to “Dlaczego DirectX jest fajny?”

  1. Zapomniałeś wspomnieć o tym, że w OGLu do każdej trochę bardziej skomplikowanej (a nawet całkiem prostej) rzeczy są rozszerzenia, które trzeba wczytywać dynamicznie – co, oględnie mówiąc, jest ‚dość’ niewygodne.

  2. Fakt, o tym nie napisalem :)

  3. Bardzo dobrze powiedziane! Popieram! A zalet DirectX-a można wymienić jeszcze dużo więcej :)

  4. @Xion: A kto Ci każe żonglować rozszerzeniami ręcznie? Mało jest do tego gotowych bibliotek? ;)

    A tak ogólnie, Twoja „prywatna opinia”, Charibo, jest trochę stronnicza w kierunku tego, co jak sądzę po prostu bardziej lubisz. Oto, dlaczego tak myślę:

    1. Zdanie o łatwości
    Oczywistym jest, że owa „łatwość” OpenGL’a dotyczy właśnie renderowania prostych scen [tych przysłowiowych trójkątów, kwadratów itp.]. Na tym polu DirectX nie ma nic do zaoferowania dla początkujących. Tablice i bufory wierzchołków, o których wspomniałeś, nie są już tam jedną z opcji, lecz są jedyną możliwością. Tryb immediate kiedyś był, ale wraz z bodajże DX8 został wycofany, a nawet on nie był tak łatwy w użyciu, jak w OpenGL.

    > albo buforow wierzcholkow – DirectX to
    > prawie ze „wymusza”, ale OGL niestety
    > nie – zostawiajac przyzwyczajenia.

    A może zostawiając wybór? Ja wolę mieć wybór, nie lubię gdy ktoś coś na mnie „wymusza” ;P

    > Rowniez operacje na macierzach – w
    > DXie to koniecznosc, co zmusza adepta
    > grafiki do nauki podstaw matematyki.
    Ano właśnie, a to oznacza większą barierę wejścia. Nie każdy potrzebuje sam wyliczać macierze, by osiągnąć swój cel. Niektórzy [nawet ci zaawansowani] używają gotowych funkcji do transformacji macierzowych, nawet pod DirectX, z czystej wygody. Więc nie jest to argument za/przeciw którejkolwiek z bibliotek, a Ty próbujesz tak go wykorzystać.

    2. Zdanie o formatach
    > Kazdy programista OpenGL prawdopodobnie
    > ma napisane wlasne klasy parsujace
    > pliki w roznych formatach siatek,
    > tekstur itp.

    Każdy programista DirectX prawdopodobnie ma nad łóżkiem zdjęcie Billa G. ;J Rozumiesz aluzję? To samo odnośnie własnych formatów można przecież powiedzieć o programistach DirectX, bo wybór formatu jest osobistą sprawą każdego programisty. W grach jakoś widuję najczęściej własne formaty, lub jedne z ogólnie znanych „własnych” formatów. Jakoś nie widziałem nigdzie plików .x .

    > Watpie, jednak, aby przecietny
    > poczatkujacy lub srednio-zaawanosowany
    > programista byl w stanie napisac
    > samemu, na przyklad, funkcje
    > optymalizujace siatke pod katem
    > efektywnosci Vertex i preVS Cache
    > karty czy siatki progresywne.

    Dlatego przeciętny programista docenia możliwość skorzystania z gotowych bibliotek ;J A skoro ktoś te biblioteki pisze, to wierzę, że jednak są programiści, którzy potrafią robić takie rzeczy, jak piszesz. Nie tylko panowie z Microsoft to potrafią ;J DirectX daje jedno możliwe rozwiązanie, ale zawsze znajdzie się ktoś, komu to nie będzie pasować, bo np. potrafi zrobić to lepiej. Wtedy możliwości użycia zewnętrznych bibliotek okazuje się cenniejsza, niż przywiązanie do Jedynego Słusznego formatu.

    3. Standardowo porównywanie gruszek i jabłek.
    > Warto rowniez wspomniec o loaderach
    > tekstur – rowniez tych w zabawnych
    > formatach i kompresjach (DXTn,
    > floating-point itd.), stosunkowo
    > prostego w uzyciu systemu Precomputed
    > Radiance Transfer, szybkiej i bogatej
    > biblioteki matematycznej

    Ale takie rzeczy też są dostępne dla OpenGL, w formie zewnętrznych bibliotek pomocniczych. Czy rzeczy, o których wspomniałeś, to nie są biblioteki pomocnicze? Bo raczej do „rdzenia” DirectX nie należą chyba?
    A już szczególnie to:

    > czy “generatora” paskow trojkatow

    Narzędzia i programy wspomagające też bierzesz na szalę? To dorzuć jeszcze IDE, społeczność, płace…

    Ech, nie ma to jak „A, porównam sobie coś dla zabawy” ;P To już bardziej rzetelne porównania szły w wątku na gamedev.pl ;P

  5. >Każdy programista DirectX >prawdopodobnie ma nad łóżkiem zdjęcie
    >Billa G. ;J Rozumiesz aluzję? To samo
    >odnośnie własnych formatów można
    >przecież powiedzieć o programistach
    >DirectX, bo wybór formatu jest osobistą
    >sprawą każdego programisty. W grach
    >jakoś widuję najczęściej własne
    >formaty, lub jedne z ogólnie znanych
    >“własnych” formatów. Jakoś nie
    >widziałem nigdzie plików .x .

    Nie zrozumiales, o co mi chodzi. Nawet zastanawialem sie, czy pisac tam to “OpenGL”, zeby nie bylo niedomowien. Mowiac o tym chodzilo mi w zasadzie o interface ID3DXMesh (wystarczylo doczytac do konca, aby sie domyslic ;) ). No i moze jeszcze jedna sprawa – czy poczatkujacy (a podejrzewam, ze nawet niejeden sredniozaawansowany – sam mialbym pewnie trudnosci), nawet jak sparsuje sobie ten plik, bedzie go w stanie szybko wyswietlic, piszac sobie te funkcje ktore wymienilem? Ze juz nie wspomne o tym, ze ID3DXMesh ma generalnie malo wspolnego z .x ;)

    >Czy rzeczy, o których wspomniałeś, to
    >nie są biblioteki pomocnicze? Bo raczej
    >do “rdzenia” DirectX nie należą chyba?

    Chyba jednak naleza. D3DX jest bardzo dobrze zintegrowany.

    >A skoro ktoś te biblioteki pisze, to
    >wierzę, że jednak są programiści,
    >którzy potrafią robić takie rzeczy, jak
    >piszesz.

    Oczywiscie, ze jest bardzo duzo osob, ktore to potrafi. Ale nadal – rozmawiamy o _poczatkujacych_w_programowaniu_grafiki_, a nie rzeznikach, ktorzy znaja zasade dzialania stera czy karty jak wlasna kieszen ;)

    >Wtedy możliwości użycia zewnętrznych
    >bibliotek okazuje się cenniejsza, niż
    >przywiązanie do Jedynego Słusznego
    >formatu.

    Nadal – uzywania zewnetrznych bibliotek nikt nie broni. Poprostu _zazwyczaj_ nie trzeba, gdyz to, co jest w DX starcza ;)

    >Narzędzia i programy wspomagające też
    >bierzesz na szalę? To dorzuć jeszcze
    >IDE, społeczność, płace…

    Generator paskow trojkatow jest wbudowany w D3D poza tym pisalem, ze nie biore pod uwage, bo nikt tego nie uzywa ;)

    Gdybym mowil o SDK, dodalbym jeszcze kilka rzeczy, jak PIX, DXTex czy DXViewer, ale to specjalnie wazne nie jest (no, moze poza pixem, bez ktorego jest ciezko, ale nvm)

    >Ech, nie ma to jak “A, porównam sobie
    >coś dla zabawy” ;P To już bardziej
    >rzetelne porównania szły w wątku na
    >gamedev.pl ;P

    Jesli juz schodzimy na taki ton, to nie ma to jak selektywne cytowanie i nie czytanie ze zrozumieniem ;)

    No i z zamiarem napisania takiego tekstu nosilem sie juz dluzszy czas. Nie sa to wnioski wyciagniete ad-hoc, bo “mam ochote na notke” ;)

Skomentuj

Wprowadź swoje dane lub kliknij jedną z tych ikon, aby się zalogować:

Logo WordPress.com

Komentujesz korzystając z konta WordPress.com. Wyloguj / Zmień )

Zdjęcie z Twittera

Komentujesz korzystając z konta Twitter. Wyloguj / Zmień )

Zdjęcie na Facebooku

Komentujesz korzystając z konta Facebook. Wyloguj / Zmień )

Zdjęcie na Google+

Komentujesz korzystając z konta Google+. Wyloguj / Zmień )

Connecting to %s

 
%d blogerów lubi to: