
W ciągu kilku ostatnich lat przetwarzanie grafiki w czasie rzeczywistym osiągnęło stopień najwyższego zaawansowania. Obecnie powszechnie dostępne są procesory przetwarzania grafiki, które dorównują szybkością i możliwościami najdroższym stacjom graficznym sprzed zaledwie kilku lat.
Jeżeli jesteś gotów na pogłębienie swojej wiedzy na temat programowania grafiki, sięgnij po tę książkę. Opisuje ona zaawansowane zagadnienia w taki sposób, że nawet początkujący przyswajają je łatwo. Czytelnicy, którzy będą studiować tę książkę od początku i dokładnie ją przeanalizują, nie powinni mieć problemu z nauczeniem się coraz bardziej skomplikowanych technik. Czytelnicy zaawansowani mogą wykorzystywać tę książkę jako użyteczne źródło informacji, przeskakując od rozdziału do rozdziału, wtedy kiedy mają potrzebę nauczenia się lub dokładniejszego poznania wybranych problemów.
Książka zawiera:- Powtórzenie wiadomości o wektorach i macierzach
- Omówienie zagadnień związanych z oświetleniem
- Opis potoków graficznych
- Opis konfiguracji środowiska
- Sposoby korzystania z DirectX
- Dokładne omówienie renderingu
- Opis sposobów nakładania tekstur
- Problemy związane z przezroczystością
- Opis technik vertex shader i pixel shader
- Zasady tworzenia cieni przestrzennych
- Sposoby tworzenia animowanych postaci
Niezależnie od Twojego programistycznego doświadczenia, książka ta może posłużyć Ci jako przewodnik pozwalający na osiągnięcie mistrzostwa w wykorzystaniu możliwości programowania grafiki w czasie rzeczywistym.

Od wydawcy serii (17)
Słowo wstępne (19)
Wstęp (21)
Część I Podstawy (23)
Rozdział 1. Grafika 3D. Rys historyczny (25)
- Rozwój sprzętu klasy PC (25)
- Rozwój konsol do gier (26)
- Rozwój technik filmowych (27)
- Krótka historia DirectX (27)
- Kilka słów na temat OpenGL (28)
- Czym jest wektor? (31)
- Normalizacja wektorów (32)
- Arytmetyka wektorów (33)
- Iloczyn skalarny wektorów (34)
- Iloczyn wektorowy wektorów (35)
- Kwaterniony (37)
- Działania na wektorach w bibliotece D3DX (37)
- Podsumowanie (39)
- Co to jest macierz? (41)
- Macierz przekształcenia tożsamościowego (43)
- Macierz translacji (przesunięcia) (43)
- Macierz skalowania (44)
- Macierz obrotu (44)
- Łączenie macierzy (45)
- Macierze a biblioteka D3DX (46)
- Podsumowanie (47)
- Czym jest kolor? (49)
- Oświetlenie otaczające i emisyjne (51)
- Oświetlenie rozpraszające (52)
- Oświetlenie zwierciadlane (53)
- Pozostałe rodzaje światła (54)
- Uwzględnianie wszystkich rodzajów oświetlenia w Direct3D (55)
- Rodzaje cieniowania (57)
- Podsumowanie (58)
- Potok Direct3D (60)
- Wierzchołki oraz powierzchnie wyższego rzędu (60)
- Faza stałych funkcji transformacji oraz oświetlenia (61)
- Mechanizmy vertex shader (62)
- Mechanizm obcinający (63)
- Multiteksturowanie (63)
- Mechanizmy pixel shader (63)
- Mgła (64)
- Testy głębi, matrycy oraz kanału alfa (64)
- Bufor ramek (65)
- Zagadnienia związane z wydajnością (65)
- Podsumowanie (66)
Rozdział 6. Konfiguracja środowiska i prosta aplikacja Win32 (71)
- Kilka słów o SDK (71)
- Konfiguracja środowiska (72)
- Prosta aplikacja Win32 (73)
- Plik Wykonywalny.h (74)
- Plik Aplikacja.h (75)
- Plik Wykonywalny.cpp (76)
- Plik Aplikacja.cpp (77)
- Kompilacja i uruchamianie prostej aplikacji (79)
- Analiza. Dlaczego to zrobiliśmy w taki sposób? (80)
- Podsumowanie (81)
- Czym jest urządzenie Direct3D? (83)
- Krok 1: Tworzymy obiekt Direct3D (84)
- Krok 2: Dowiadujemy się czegoś więcej na temat sprzętu (85)
- Krok 3: Utworzenie urządzenia Direct3D (86)
- Krok 4: Odtworzenie utraconego urządzenia (88)
- Krok 5: Zniszczenie urządzenia (89)
- Rendering z wykorzystaniem urządzenia Direct3D (89)
- Zerowanie urządzenia (90)
- Wracamy do pliku Aplikacja.h (91)
- Wracamy do pliku Aplikacja.cpp (93)
- Podsumowanie (100)
Rozdział 8. Wszystko rozpoczyna się od wierzchołków (103)
- Czym są wierzchołki? (103)
- Czym tak naprawdę są wierzchołki? (104)
- Tworzenie wierzchołków (106)
- Niszczenie bufora wierzchołków (107)
- Konfiguracja i modyfikacja danych o wierzchołkach (108)
- Renderowanie wierzchołków (109)
- Zagadnienia związane z wydajnością (111)
- Nareszcie coś na ekranie! (112)
- Podsumowanie (117)
- Co to są transformacje? (119)
- Transformacje świata (120)
- Transformacje widoku (121)
- Tworzenie transformacji świata i transformacji widoku (121)
- Rzuty (123)
- Przekształcenia a urządzenie D3D (124)
- Zastosowanie stosu macierzy (126)
- Widok ekranu (127)
- Łączymy to razem (128)
- Zalecane ćwiczenia (132)
- Zagadnienia związane z wydajnością (133)
- Podsumowanie (133)
- Przekształcanie wierzchołków w powierzchnie (135)
- Renderowanie powierzchni (136)
- Renderowanie z wykorzystaniem list trójkątów (137)
- Renderowanie z wykorzystaniem wachlarzy trójkątów (138)
- Renderowanie z wykorzystaniem pasków trójkątów (138)
- Renderowanie z zastosowaniem prymitywów indeksowanych (139)
- Ładowanie i renderowanie plików .X (141)
- Problemy wydajności (143)
- Kod (144)
- Podsumowanie (155)
- Struktura D3DLIGHT8 (157)
- Światła kierunkowe (158)
- Światła punktowe (159)
- Światła reflektorowe (160)
- Konfiguracja oświetlenia w urządzeniu D3D (162)
- Program (163)
- Kod (165)
- Podsumowanie (176)
- Tekstury od środka (177)
- Powierzchnie i pamięć (178)
- Rozmiar a potęga dwójki (179)
- Poziomy powierzchni i mipmapy (179)
- Tworzenie tekstur (180)
- Tekstury i wierzchołki (183)
- Tekstury i urządzenie (185)
- Problemy związane z wydajnością (185)
- Zagadnienia zaawansowane (186)
- Tekstury i kolory (186)
- Macierz tekstury (187)
- Wielokrotne teksturowanie - multiteksturowanie (187)
- Program (187)
- Podsumowanie (196)
- Ustawianie stanu fazy tekstury (200)
- Łączenie tekstur i multiteksturowanie (200)
- D3DTSS_COLOROP i D3DTSS_ALPHAOP (201)
- D3DTSS_COLORARG1, D3DTSS_COLORARG2, D3DTSS_ALPHAARG1 i D3DTSS_ALPHAARG2 (201)
- Operacje trójargumentowe (D3DTSS_COLORARGO i D3DTSS_ALPHAARGO) (202)
- D3DTSS_RESULTARG (202)
- Sprawdzanie możliwości urządzenia (202)
- Odwzorowania nierówności (ang. bump mapping) (203)
- Stany dotyczące współrzędnych tekstury (203)
- D3DTSS_TEXTCOORDINDEX (203)
- D3DTSS_ADDRESSU, D3DTSS_ADDRESSV i D3DTSS_ADDRESSW (203)
- D3DTSS_BORDERCOLOR (205)
- D3DTS_TEXTURETRANSFORMFLAGS (205)
- Sprawdzanie możliwości urządzenia (205)
- Filtrowanie tekstury i mipmapy (205)
- D3DTSS_MAGFILTER (206)
- D3DTSS_MINFILTER (207)
- D3DTSS_MIPFILTER (207)
- D3DTSS_MIPMAPLODBIAS (207)
- D3DTSS_MAXMIPLEVEL (207)
- D3DTSS_MAXANISOTROPY (207)
- Sprawdzanie możliwości urządzenia (208)
- Stany faz tekstur, a mechanizmy shader (208)
- Kod (208)
- Podsumowanie (215)
- Testowanie głębi (217)
- Bufor W (219)
- Przesunięcie Z (219)
- Zerowanie bufora głębi (220)
- Przezroczystość (220)
- Wartość alfa w plikach formatu 32-bitowego (220)
- Kanał alfa wygenerowany za pomocą programu DirectX Texture Tool (221)
- Kanał alfa określony za pomocą parametru KluczKoloru (221)
- Włączanie przezroczystości (222)
- Test alfa (222)
- Problemy wydajności (223)
- Kod (223)
- Podsumowanie (231)
Rozdział 15. Mechanizmy vertex shader (235)
- Co to jest vertex shader? (236)
- Rejestry danych o wierzchołkach (237)
- Rejestry stałych (238)
- Rejestr adresowy (238)
- Rejestry tymczasowe (238)
- Wynik działania mechanizmów vertex shader (238)
- Kod mechanizmów shader (239)
- Mieszanie i zapisywanie masek (241)
- Implementacja shadera (242)
- Shadery a urządzenie (242)
- Utworzenie deklaracji (243)
- Asemblacja shadera (245)
- Utworzenie shadera (245)
- Wykorzystanie shadera (246)
- Niszczenie shadera (247)
- Zastosowanie shaderów do figur tworzonych za pomocą obliczeń (247)
- Zastosowanie shaderów do siatek (247)
- Prosty shader (248)
- Przekształcenia w prostym shaderze (248)
- Ustawianie innych danych opisu wierzchołków (249)
- Problemy wydajności (249)
- Kod (250)
- Podsumowanie (256)
- Co to jest pixel shader? (259)
- Wersje mechanizmów pixel shader (260)
- Wejścia, wyjścia oraz operacje realizowane przez mechanizmy pixel shader (261)
- Rejestry kolorów (261)
- Rejestry tymczasowe i wyjściowe (262)
- Rejestry stałych (262)
- Rejestry tekstur (262)
- Warunkowe odczytywanie tekstur (262)
- Instrukcje dostępne w mechanizmach pixel shader (263)
- Łączenie instrukcji w pary (264)
- Instrukcje adresowania tekstur (264)
- Modyfikatory dostępne dla mechanizmów pixel shader (269)
- Ograniczenia i uwagi dotyczące stosowania mechanizmów pixel shader (270)
- Sprawdzanie dostępności mechanizmów pixel shader (271)
- Asemblacja, tworzenie i wykorzystywanie mechanizmów pixel shader (271)
- Bardzo prosta aplikacja wykorzystująca mechanizm pixel shader (272)
- Proste oświetlenie za pomocą mechanizmu vertex shader (273)
- Proste operacje łączenia wewnątrz pixel shadera (274)
- Prosta aplikacja z wykorzystaniem pixel shadera (276)
- Podsumowanie (280)
Rozdział 17. Zastosowanie shaderów z modelami w postaci siatek (285)
- Pojęcia podstawowe (285)
- Od materiałów do kolorów wierzchołków (287)
- Od kolorów wierzchołków do danych opisu wierzchołków (288)
- Problemy wydajności (289)
- Implementacja (289)
- Podsumowanie (295)
- Przemieszczanie wierzchołków wzdłuż wektorów normalnych (297)
- Zniekształcanie wierzchołków z wykorzystaniem sinusoidy (300)
- Implementacja (304)
- Pomysły na rozszerzenie przykładowego programu (308)
- Podsumowanie (309)
- Podstawowe zagadnienia dotyczące billboardów (312)
- Mechanizm shader dla billboardu (312)
- Implementacja (316)
- Inne przykłady billboardów (321)
- Podsumowanie (322)
- Układ kartezjański oraz inne układy współrzędnych (325)
- Odwzorowania pomiędzy układami współrzędnych w mechanizmie vertex shader (327)
- Kod programu (330)
- Inne zastosowania pokazanej techniki (336)
- Podsumowanie (337)
- Linie, krzywe, obszary (339)
- Obliczanie wektorów normalnych za pomocą "różniczek" (342)
- Obliczanie wartości dla obszaru za pomocą shadera (345)
- Aplikacja wykorzystująca obszary Beziera (348)
- Zastosowania i zalety obszarów Beziera (356)
- Łączenie krzywych i obszarów (357)
- Podsumowanie (358)
- Techniki animacji postaci (359)
- Rejestr adresowy (362)
- Skinning z wykorzystaniem palety macierzy wewnątrz shadera (363)
- Aplikacja (365)
- Inne zastosowania palet (374)
- Podsumowanie (374)
- Kodowanie głębi za pomocą koloru wierzchołka (377)
- Shader głębi (378)
- Aplikacja wykorzystująca kodowanie głębi (380)
- Shader implementujący efekt promieni X (381)
- Aplikacja wykorzystująca efekt promieni X (384)
- Podsumowanie (387)
- Przekształcanie wektorów oświetlenia do przestrzeni obiektu (390)
- Shader oświetlenia kierunkowego (393)
- Shader oświetlenia punktowego (395)
- Shader oświetlenia reflektorowego (397)
- Kod aplikacji (399)
- Wiele rodzajów oświetlenia w jednym shaderze (401)
- Podsumowanie (402)
- Shadery, tekstury i funkcje zespolone (403)
- Shader kreskówkowy - część 1 (405)
- Shader kreskówkowy - część 2 (406)
- Implementacja cieniowania kreskówkowego w shaderze (408)
- Aplikacja cieniowania kreskówkowego (409)
- Modyfikacja tekstur (410)
- Modyfikacja shadera (411)
- Podsumowanie (411)
- Mapowanie środowiskowe i mapy sześcienne (413)
- Dynamiczna modyfikacja map sześciennych (414)
- Obliczanie wektorów odbić (415)
- Obliczanie przybliżonych wektorów załamania światła (417)
- Efekty odbicia i załamania z wykorzystaniem vertex shadera (419)
- Aplikacja (421)
- Inne przykłady wykorzystania map sześciennych (427)
- Podsumowanie (427)
- Rzutowanie cieni na płaszczyznę (429)
- Równanie płaszczyzny (430)
- Macierz cienia (432)
- Wykorzystanie bufora matrycy w tworzeniu cieni (433)
- Aplikacja demonstracyjna (434)
- Ograniczenia techniki cieniowania na płaszczyznę (442)
- Podsumowanie (443)
- Zasada tworzenia cieni przestrzennych (445)
- Wykorzystanie mechanizmu vertex shader w tworzeniu cienia przestrzennego (451)
- Kod aplikacji wykorzystującej cieniowanie przestrzenne (452)
- Zalety i wady cieniowania przestrzennego (459)
- Podsumowanie (460)
- Podstawy mapy cieni (463)
- Renderowanie do tekstury sceny z punktu widzenia kamery (466)
- Renderowanie do tekstury (467)
- Mechanizm cieniowania wierzchołków porównujący wartości głębi (469)
- Pixel shader wykonujący mapowanie cieni (470)
- Aplikacja (471)
- Wady i zalety techniki mapowania cieni (479)
- Podsumowanie (479)
Rozdział 30. Oświetlenie reflektorowe per pixel (483)
- Proste mapy świetlne (483)
- Oświetlenie per pixel z wykorzystaniem pixel shadera (485)
- Oświetlenie reflektorowe per pixel (486)
- Vertex shader stosowany w technice oświetlenia reflektorowego per pixel (489)
- Pixel shader stosowany w technice oświetlenia reflektorowego per pixel (491)
- Aplikacja oświetlenia reflektorowego per pixel (491)
- Oświetlenie punktowe per pixel (494)
- Vertex shader stosowany w technice oświetlenia punktowego per pixel (495)
- Pixel shader stosowany w technice oświetlenia punktowego per pixel (496)
- Aplikacja oświetlenia punktowego per pixel (497)
- Ograniczenia prezentowanych technik (498)
- Podsumowanie (499)
- Pojęcie odwzorowania nierówności (501)
- Tworzenie map wektorów normalnych i korzystanie z nich (503)
- Tworzenie wektorów bazowych w przestrzeni tekstury (505)
- Vertex shader odwzorowania nierówności (507)
- Odwzorowanie nierówności bez pixel shadera (508)
- Odwzorowanie nierówności z wykorzystaniem pixel shadera (513)
- Ograniczenia oraz możliwości usprawnienia techniki odwzorowania nierówności (515)
- Podsumowanie (516)
- Odbicie per pixel (519)
- Korzystanie z texm3x3pad (520)
- Vertex shader odwzorowania nierówności z odbiciem światła (522)
- Pixel shader odwzorowania nierówności z odbiciem światła (524)
- Aplikacja odwzorowania nierówności z odbiciem światła (525)
- Cieniowanie kreskówkowe per pixel (530)
- Vertex shader cieniowania kreskówkowego per pixel (530)
- Pixel shader cieniowania kreskówkowego per pixel (532)
- Aplikacja cieniowania kreskówkowego per pixel (534)
- Podsumowanie (536)
Rozdział 33. Renderowanie do tekstury - pełnoekranowe rozmycie ruchu (541)
- Tworzenie tekstury będącej celem renderowania (542)
- Wyodrębnianie powierzchni z tekstur będących celem renderowania (543)
- Renderowanie do tekstury (544)
- Renderowanie do dynamicznej mapy sześciennej (545)
- Rozmycie ruchu (547)
- Sposób tworzenia efektu rozmycia ruchu (548)
- Aplikacja rozmycia ruchu (549)
- Wydajność techniki (558)
- Podsumowanie (558)
- Biedny DirectDraw. Wiedziałem, że to się tak skończy... (561)
- Krok 1: Odrzuć jedną literę "D" (563)
- "Duszki" - obrazy są wszystkim (565)
- Wykorzystywanie wierzchołków w 2D (566)
- Bardzo prosta aplikacja 2D (568)
- Wydajność (572)
- Możliwości wykorzystania techniki 2D (575)
- Podsumowanie (576)
- DirectShow w pigułce (579)
- MP3 (581)
- Działanie filtru wideo do tekstury (582)
- Czynności przygotowawcze przed utworzeniem klasy tekstury (584)
- Klasa filtru teksturowego (585)
- Aplikacja tekstury wideo (593)
- Podsumowanie (595)
- Zalety przetwarzania po etapie renderowania (597)
- Pełnoekranowa regulacja kolorów z wykorzystaniem pixel shaderów (598)
- Filtr czarno-biały (599)
- Regulacja jasności obrazu (600)
- Inwersja kolorów (601)
- Solaryzacja obrazu (602)
- Regulacja kontrastu sceny (603)
- Efekt sepii (605)
- Wykorzystywanie krzywych kolorów do modyfikacji kolorów (607)
- Przetwarzanie obrazu z wykorzystaniem jąder splotu (611)
- Wydajność (616)
- Podsumowanie (617)
- Podstawy (620)
- Implementacja (621)
- Podsumowanie (634)
- Czas niskiej rozdzielczości (635)
- Czas wysokiej rozdzielczości (636)
- Kilka ogólnych słów na temat animacji (637)
- Implementacja (639)
- Podsumowanie (641)
- Znaczenie bufora matrycy oraz testu matrycy (643)
- Stany renderowania bufora matrycy (645)
- Uaktywnianie bufora matrycy (645)
- Ustawianie wartości odniesienia dla testu (645)
- Konfigurowanie funkcji porównywania (646)
- Ustawianie operacji uaktualniania (646)
- Maski matrycy (647)
- Celownik snajpera z wykorzystaniem bufora matrycy (648)
- Podsumowanie (652)
- Bardzo proste pobieranie 2D (655)
- Pobieranie za pomocą promieni (657)
- Poruszanie się w terenie z wykorzystaniem techniki pobierania za pomocą promienia (659)
- Procedura pobierania na poziomie pikseli (664)
- Vertex shader pobierania na poziomie pikseli (665)
- Aplikacja pobierania na poziomie pikseli (666)
- Inne zastosowania techniki pobierania na poziomie pikseli (671)
- Problemy wydajności (673)
- Podsumowanie (673)
Skorowidz (677)