Wikipedysta:VanDut/Brudnopis

Z Wikibooks, biblioteki wolnych podręczników.
Przejdź do nawigacji Przejdź do wyszukiwania

Niniejsza książka wprowadzi Cię w świat, którym dopiero od niedawna mogą się cieszyć użytkownicy OpenGL'a.

Wprowadzenie[edytuj]

Programowalne jednostki graficzne pojawiły się już parę lat temu. Język Cieniowania (ang. Shading Language) w grafice komputerowej jest wysokiego poziomu językiem według którego własciwości wyrenderowanego materiału mogą zostać opisane. Może to obejmować złożone opisy absorbacji światła i rozproszenia, mapowania tekstur, odbicia i refrakcję, cieniowanie, przemieszczenie powierzchni oraz efekty post-produkcyjne.

Pojedynczy program napisany w takowym języku nazywany jest shader'em. W trakcie renderowania sceny shader'y są używane do ustalenia wyglądu każdego (lub wybranego) obiektu.

Ta książka opisuje OpenGL Shading Language (GLSL lub jak na oficjalnej stronie OpenGLOGLSL, glslang). Istnieją też inne interfejsy oferujące shader'y, takie jak DirectX lub język Cg nVidii. Wbudowany do OpenGL język GLSL (od wersji 2.0, wczesniejsze mogą kożystać z glslang poprzez rozszerzenia) oferuje jednak ogromną przewagę nad konkurencją. OpenGL jest dostępny na niemalże wszystkie platformy systemowe, więc siłą rzeczy OpenGL Shading Language także dziedziczy tę własność. Czymś takim nie mogą się pochwalić język Cg firmy nVidia oraz DirectX korporacji Microsoft.

Pierwszą komercyjną implemnetacją Języka Cieniowania był Renderman firmy Pixar.

Istnieją dwa typy shader'ów. Pierwszy odpowiedzialny jest za modyfikację werteksów, drugi natomiast zmienia atrybuty fragmentów (pikseli). Oba zostaną opisane w odpowiednich sekcjach.

Architektura OpenGL[edytuj]

Zrozumienie działania OpenGL Shading Language, bez wczesniejszego zrozumienia zasady działania OpenGL'a, było by utrudnione. Zrozumienie natomiast co shader'y zrobić mogą, a czego nie, nie było by możliwe bez uprzedniego zrozumienia w jakich stadiach OpenGL'a one funkcjonują.

Aby ułatwić Ci zrozumienia tego zagadnienia umieszczony został poniżej diagram prezentujący funkcjonowanie OpenGL'a.

Opengl pipeline.png

Transformacja werteksów

Na tym etapie werteks otrzymuje takie atrybuty jak położenie w przestrzeni, kolor, normalną, koordynaty tekstury, oraz wiele innych. Danymi wejściowymi tego stanu są indywidualne właściwości wierzchołków. Oto zestaw funkcji, które są wykonywane w tym stanie:

  • Transformacja pozycji werteksu
  • Obliczenia związane ze światłem
  • Generowanie i transformacja koordynatów tekstury


Montaż i rasteryzacja prymitywów

Danywi wejściowymi tego stadium są przetransformatowane wierzchołki, jak również informacje o połączeniach danych wierzchołków. Te dane informują OpenGL w jaki sposób wierzchołki łączą się tworząc prymitywy. To własnie w tym momencie prymitywy są montowane.

Ta faza jest również odpowiedzialna za operacje obcinania w polu widoku oraz tych płaszcyzn, które odwrócone do kamery tyłem.

Rasteryzacja ustala położenie fragmentów oraz pikseli na prymitywie. Fragment jest w tym momencie kawałkiem danych który zostanie użyty do aktualizowania pikseli w buforze ramek o specyficzne lokalizacji. Fragment zawiera nie tylko kolor, ale również normalne, koordynaty tekstury wraz z innymi możliwymi atrybutami, które są używane do ustalenia nowego kolory piksela.

Dane wyjściowe tej fazy są:

  • Pozycja fragmentów w buforze ramek
  • Interpolowane wartości dla każdego fragmentu atrybutów obliczonych w fazie transformacji werteksów

Dane obliczone w tym stadium, połączone z informacją o połączeniach werteksów umożliwia tej fazie na obliczenie właściwych atrybutów fragmentów. Dla przykładu, każdy werteks ma swoją przetransformatowaną pozycję. Kiedy bierze siępod uwagę wierzchołki tworzące prymityw, możliwe jest obliczenie położenia pozycji fragmentów prymitywu. Innym przykładem jest użycie koloru. Jeśli trójkąt ma wierzchołki z różnymi kolorami, wtedy kolory są obliczane na podstawie interpolacji kolorów wierzchołków ważonych przez relatywną odległość od wierzchołków do fragmentów


Teksturowanie i kolorowanie fragmentów

Interpolowane informacje fragmentów są danymi wejściowymi dla tej fazy. Kolor został jużobliczony w poprzednim stadium poprzez interpolację, i tutaj może być połączony z tekselem (elementem tekstury) dla przykładu. Koordynaty tekstury zostały róznierz interpolowane w poprzedniej fazie. Innym elementem, który jest brany pod uwagę podczas obliczania koloru jest mgła, która właśnię w tym momencie powinna być brana pod uwagę. Ogólnym wynikiem tej fazy są kolor fragmentu oraz głebia w jakiej sięon znajduje.


Operacje rasteryzujące

Danymi wejściowymi tego stanu są:

  • Lokacja piksela
  • Głębia fragmentu oraz jego kolor

Ostanie stadium wykonuje szereg testów z użyciem fragmentów, takich jak:

  • Test obcinania
  • Test przeźroczystości
  • Test szablonu
  • Test głębi

...

Procesory werteksów i fragmentów[edytuj]

Procesor werteksów[edytuj]

Procesor fragmentów[edytuj]

Środowisko programistyczne[edytuj]

Część teoretyczna[edytuj]

Shader[edytuj]

Program[edytuj]

Część praktyczna[edytuj]

Kod źródłowy[edytuj]

Semantyka języka[edytuj]

Przykłady[edytuj]

Bibliografia[edytuj]

Książka ta została oparta na materiałach dostępnych na oficjalnej stronie OpenGL, oraz na samouczku dostępnym na stronie www.lighthouse3d.com. Autorzy dołożyli wszelkich starań by treści zawarte w niniejszej książce były oryginalne i twórcze.

Referencje:

Autorzy[edytuj]

Oto lista autorów którzy wnieśli wkład merytoryczny do tejże książki: