Trochę o wierzchołkach, trójkątach i innych takich bzdetach.

Witam w kolejnej częsci kursu. Także tym razem nie będzie pięknego wstępu, a zostaniemy przy bardziej lapidarnej formie. ;)

W poprzedniej części udało nam się stworzyć działający szablon aplikacji inicjalizującej podstawowe interface`y DIrect3D. Dzisiejsza lekcja natomiast będzie w większości teoretyczna; zdaję sobie sprawę jak to brzmi, tym niemniej – pewna dawka teorii jest niestety konieczna.

Mając stworzone urządzenie, możemy zabrać się za rendering. Już w tym zdaniu trafiamy na pierwszą zagwozdkę – w jaki sposób i co to dokładnie znaczy „rendering”? No cóż – słowo jest proste do wytłumaczenia; oznacza ono poprostu rysowanie. Jednak po naszym ekranie nie możemy rysować, jak za czasów 13h, wypełniając każdy piksel po kolei. Byłoby to niewydajne i niezgodne z zasadą działania naszej karty graficznej.

Zadajmy więc pytanie – w jaki sposób rysujemy, jeśli nie wypełniając obrazek bit po bicie i piksel po pikselu? Dawno dawno temu, pewien mądry człowiek wymyślił, iż da się przybliżyć kształt dowolnej figury za pomocą trójkątów. Właśnie tę ideę zastosowano w grafice 3D. No, ale jak opisać trójkąt? Za pomocą trzech wierzchołków oczywiście!

Jednak droga od wierzchołka do obrazu na ekranie nie jest aż tak prosta, jak by się wydawało. Przechodzą one przez tak zwany potok renderingu (zwany też z angielskiego rendering pipeline`em).

image

Obrazek ten przedstawia oczywiście potok w ogromnym uproszczeniu -będziemy go rozszerzać w miarę potrzeb – jednak jedynie te elementy są nam dziś niezbędne. Na początku potoku mamy więc oczywiście aplikację, na końcu zaś gotowy obraz na ekranie (a właść. na buforze tylnym). Aplikacja dostarcza wierzchołki karcie graficznej. Ta przekazuje je do Vertex Shadera. Vertex Shader jest jakby programem, który działa na wierzchołku. Przyjmuje on parametry wierzchołka od aplikacji (pozycje, kolor…) i zwraca pozycję (lub/oraz cokolwiek sobie zażyczymy). Teoria na razie brzmi trochę sucho, ale już w niedługo będziemy sprawnie posługiwać się tym narzędziem.

Gdybyśmy w tym momencie (jakimś sposobem) narysowali to, co siedzi wewnątrz karty, ujrzelibyśmy jedynie punkty. Dlatego też wierzchołki po VS-ie wędrują do rasteryzatora (rasterizer). Ten fragment potoku odpowiada za „poskładanie” z wierzchołków trójkątów.

image37

Działanie rasteryzera przedstawione jest (mniej-więcej) na tym rysunku. Urządzenie otrzymuje wierzchołki. Następnie składa on z nich trójkąt, dzieląc go na małe fragmenty – piksele.

Tutaj mała dygresja – nazewnictwo w tym przypadku może powodować niemałe zamieszanie. Zależnie od lansowanego przez nas słownictwa (jakkolwiek głupio to brzmi ;) ) przyjęło sie różnie nazywać ten obiekt. Jedni mówią na taki pojedyńczy „kawałek” zrasteryzowanego trójkąta „piksel”, inni (zazwyczaj OpenGL-owcy) określają go jako „fragment”. Oba terminy są poprawne, równorzędne znaczeniowo i będą używane zamiennie.

Od tego momentu, dla potoku i karty nie ma już wierzchołków, a są jedynie piksele. Każdy piksel – inaczej niż vertex – charakteryzują dwie właściwości – pozycja oraz kolor. Te dwa parametry ustawiane są przez kolejny program wykonywany na karcie – Pixel Shader. Na kolor każdego z pikseli który wyświetlimy mogą składać się różne wartości, zależnie od napisanego przez nas PS-a. Gotowe fragmenty wędrują przez mniej ważne, pominięte teraz elementy potoku wprost na bufor tylni – skąd już tylko jeden krok na ekran.

To była bardzo ważna lekcja. Czysto teoretyczna i być może sucha, ale zrozumienie zasady działania potoku jest tym, bez czego bardzo trudno programować grafikę. Zaznaczam przy tym, że wiele niezrozumiałych dzisiaj rzeczy powinno się rozjaśnić w ciągu kilku następnych części.

Pozdrawiam!

Reklamy

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: