
Książka ta odsłania wszystkie tajemnice OpenGL - biblioteki graficznej stosowanej do tworzenia profesjonalnej grafiki 3D, za pomocą której zostały stworzone między innymi takie efekty specjalne, jak dinozaury w filmie "Park Jurajski" czy efekt płynnego metalu w filmie "Terminator 2". "OpenGL" to obszerny i spójny podręcznik programowania z użyciem OpenGL w systemach Windows 95 i Windows NT. Dzięki tej książce można przejść od tworzonej dotąd prostej grafiki do zaawansowanych efektów, których nie powstydziliby się nawet prawdziwi eksperci w dziedzinie trójwymiarowej grafiki. Co więcej, do opanowania zagadnień omawianych w książce nie jest potrzebna żadna wcześniejsza znajomość tematyki związanej z grafiką 3D.
Dołączona do książki płytka CD-ROM zawiera przeglądarkę VRML stworzoną z użyciem OpenGL, pliki biblioteki OpenGL 1.1 dla Windows 95, kontrolki OpenGL OCX dla Visual Basica oraz cały kod źródłowy, pliki wykonywalne i pliki binarne związane z przykładami w książce.

Przedmowa (23)
Wprowadzenie (25)
- Dla kogo jest ta książka? (26)
- System wymagany dla OpenGL (26)
- Język (26)
- Kompilatory (27)
- Co znajdziesz w tej książce (27)
- Część I: Wprowadzenie do OpenGL (28)
- Część II: Używanie OpenGL (28)
- Część III: Tematy zaawansowane i efekty specjalne (29)
- Część IV: OpenGL i... (30)
- Dodatki (31)
- Płytka CD-ROM dołączona do książki (31)
- Do dzieła! (32)
Rozdział 1. Co to jest OpenGL? (35)
- O OpenGL (36)
- Historia OpenGL (36)
- Dalszy rozwój OpenGL (37)
- Jak działa OpenGL (37)
- OpenGL w Windows (38)
- Architektura graficzna: oprogramowanie kontra sprzęt (38)
- Ograniczenia ogólnej implementacji (40)
- Dalsze perspektywy OpenGL w Windows (40)
- Postrzeganie w trzech wymiarach (41)
- 2D + Perspektywa = 3D (42)
- Usuwanie niewidocznych linii (43)
- Kolory i cieniowanie (43)
- Światła i cienie (44)
- Układy współrzędnych (44)
- Dwuwymiarowe współrzędne kartezjańskie (45)
- Obcinanie współrzędnych (46)
- Widoki, twoje okna na trójwymiarowy świat (46)
- Rysowanie prymitywów (47)
- Trójwymiarowe współrzędne kartezjańskie (48)
- Rzuty, podstawa grafiki 3D (48)
- Rzuty równoległe (49)
- Rzuty perspektywiczne (50)
- Podsumowanie (50)
- OpenGL: API, nie język (51)
- Podział pracy w OpenGL (52)
- Typy danych OpenGL (53)
- Konwencje nazw funkcji (55)
- Biblioteka AUX (56)
- Niezależność od platformy (57)
- AUX = wejście/wyjście w prosty sposób (57)
- Analiza krótkiego programu OpenGL (58)
- Część nagłówkowa (59)
- Ciało programu (60)
- Tryb wyświetlania: pojedynczy bufor (60)
- Pozycjonowanie okna (60)
- Tworzenie okna OpenGL (62)
- Czyszczenie okna (wypełnianie kolorem) (62)
- Samoczyszczenie okna (64)
- Opróżnienie zawartości kolejki (64)
- Rysowanie kształtów za pomocą OpenGL (65)
- Funkcja renderująca (66)
- Rysowanie prostokąta (66)
- Inicjowanie (67)
- Skalowanie do rozmiarów okna (68)
- Ustawianie widoku i bryły obcinania (68)
- Definiowanie widoku (71)
- Definiowanie bryły obcinania (72)
- Aby kwadrat był kwadratem (73)
- Animacja przy użyciu biblioteki AUX (74)
- Podwójne buforowanie (77)
- W końcu trochę trzeciego wymiaru! (78)
- Podsumowanie (79)
- Podręcznik (79)
- auxIdleFunc (79)
- auxInitDisplayMode (80)
- auxInitPosition (81)
- auxInitWindow (81)
- auxKeyFunc (82)
- auxMainLoop (83)
- auxMouseFunc (84)
- auxReshapeFunc (85)
- auxSetOneColor (85)
- auxSolidBox (86)
- auxSolidCone (86)
- auxSolidCube (87)
- AuxSolidCylinder (87)
- auxSolidDodecahedron (88)
- auxSolidIcosahedron (88)
- auxSolidOctahedron (88)
- auxSolidSphere (89)
- auxSolidTeapot (89)
- auxSolidTetrahedron (90)
- auxSolidTorus (90)
- auxSwapBuffers (91)
- auxWireBox (91)
- auxWireCone (91)
- auxWireCube (92)
- auxWireCylinder (92)
- auxWireDodecahedron (93)
- auxWireIcosahedron (93)
- auxWireOctahedron (94)
- auxWireSphere (94)
- auxWireTeapot (95)
- auxWireTetrahedron (95)
- auxWireTorus (95)
- glClearColor (96)
- glFlush (96)
- glOrtho (97)
- glViewport (97)
- glRect (98)
- Rysowanie w oknach Windows (102)
- Konteksty urządzeń GDI (102)
- Konteksty renderowania OpenGL (105)
- Korzystanie z funkcji Wiggle (106)
- Tworzenie i wybieranie kontekstu renderowania (106)
- Rysowanie przy użyciu OpenGL (106)
- Przygotowanie okna dla OpenGL (108)
- Style okien (108)
- Formaty pikseli (108)
- Powrót odbijającego się kwadratu (111)
- Skalowanie do okna (114)
- Tyknięcia timera (114)
- Światła, kamera, akcja! (115)
- Podsumowanie (116)
- Podręcznik (116)
- ChoosePixelFormat (116)
- DescribePixelFormat (118)
- GetPixelFormat (122)
- SetPixelFormat (122)
- SwapBuffers (123)
- wglCreateContext (124)
- wglDeleteContext (125)
- wglGetCurrentContext (125)
- wglGetCurrentDC (126)
- wglGetProcAddress (126)
- wglMakeCurrent (127)
- wglShareLists (128)
- wglUseFontBitmaps (129)
- wglUseFontOutlines (130)
- Gdy dobremu programowi przydarzają się złe przygody (134)
- Kim jestem i co potrafię? (135)
- Rozszerzenia OpenGL (136)
- Udzielanie wskazówek za pomocą funkcji glHint (137)
- Podsumowanie (138)
- Podręcznik (138)
- glGetLastError (138)
- glGetLastError (138)
- glGetString (139)
- glHint (140)
- gluErrorString (141)
- gluGetString (141)
Rozdział 6. Rysowanie w trzech wymiarach: linie, punkty i wielokaty (145)
- Rysowanie punktów w przestrzeni trójwymiarowej (146)
- Przygotowanie trójwymiarowej osnowy (146)
- Trójwymiarowy punkt: wierzchołek (148)
- Narysujmy coś! (149)
- Rysowanie punktów (149)
- Ustalanie rozmiaru punktu (152)
- Rysowanie linii w trzech wymiarach (155)
- Łamane i łamane zamknięte (156)
- Przybliżanie krzywych odcinkami (157)
- Ustalanie grubości linii (158)
- Linie przerywane (160)
- Rysowanie trójkątów w przestrzeni 3D (162)
- Trójkąt: twój pierwszy wielokąt (162)
- Kierunek (163)
- Paski trójkątów (164)
- Wachlarze trójkątów (165)
- Budowanie jednolitych obiektów (166)
- Ustawianie kolorów wielokątów (169)
- Korzystanie z bufora głębokości (169)
- Ukrywanie niewidocznych powierzchni (171)
- Tryby wielokątów (173)
- Inne prymitywy (174)
- Czworokąty (174)
- Paski czworokątów (175)
- Ogólne wielokąty (175)
- Wypełnianie wielokątów (175)
- Reguły konstruowania wielokątów (179)
- Podział wielokąta (181)
- Podsumowanie (183)
- Podręcznik (184)
- glBegin (184)
- glCullFace (185)
- glEdgeFlag (186)
- glEnd (188)
- glFrontFace (188)
- glGetPolygonStipple (189)
- glLineStipple (190)
- glLineWidth (191)
- glPointSize (193)
- glPolygonMode (194)
- glPolygonStipple (195)
- glVertex (196)
- Czy to jest ten rozdział z matematyką? (200)
- Przekształcenia (200)
- Współrzędne obserwatora (201)
- Przekształcenia punktu obserwacji (202)
- Przekształcenia modelu (202)
- Dwoistość widoku modelu (204)
- Przekształcenia rzutowania (205)
- Przekształcenia okna (206)
- Ach, te macierze... (206)
- Co to jest macierz? (206)
- Kolejka przekształceń (207)
- Macierz widoku modelu (208)
- Macierz tożsamościowa (211)
- Stosy macierzy (213)
- Atomowy przykład (214)
- Rzutowania (216)
- Rzutowanie równoległe (217)
- Rzutowanie perspektywiczne (218)
- Przykład daleko-blisko (220)
- Zaawansowane operacje na macierzach (223)
- Ładowanie macierzy (223)
- Tworzenie własnych przekształceń (224)
- Inne przekształcenia (224)
- Podsumowanie (224)
- Podręcznik (225)
- glFrustum (225)
- glLoadIdentity (226)
- glLoadMatrix (226)
- glMatrixMode (227)
- glMultMatrix (228)
- glPopMatrix (228)
- glPushMatrix (229)
- glRotate (229)
- glScale (230)
- glTranslate (231)
- gluLookAt (231)
- gluOrtho2D (232)
- gluPerspective (233)
- Czym jest kolor? (236)
- Światło jako fala (236)
- Światło jako cząsteczka (237)
- Twój osobisty wykrywacz fotonów (237)
- Komputer jako generator fotonów (238)
- Sprzęt grafiki kolorowej (239)
- Tryby graficzne w komputerach osobistych (241)
- Rozdzielczości ekranu (241)
- Głębokość koloru (241)
- Kolor 4-bitowy (242)
- Kolor 8-bitowy (242)
- Kolor 24-bitowy (242)
- Inne głębokości koloru (242)
- Wybór koloru (243)
- Kostka kolorów (243)
- Ustalanie koloru rysowania (245)
- Cieniowanie (246)
- Ustawianie trybu cieniowania (248)
- Palety Windows (249)
- Dopasowywanie kolorów (249)
- Dithering (250)
- Korzyści ze stosowania palety w trybie 8-bitowym (251)
- Tworzenie palety (253)
- Czy potrzebujesz palety? (254)
- Struktura palety (254)
- Paleta 3-3-2 (255)
- Tworzenie i usuwanie palety (258)
- Pewne ograniczenia (259)
- Tryb indeksu koloru (259)
- Kiedy używać trybu indeksu koloru? (259)
- Użycie trybu indeksu koloru (260)
- Podsumowanie (262)
- Podręcznik (263)
- glClearIndex (263)
- glColor (263)
- glColorMask (265)
- glIndex (265)
- glIndexMask (266)
- glLogicOp (267)
- glShadeModel (268)
- Światło w rzeczywistym świecie (272)
- Światło otaczające (273)
- Światło rozproszone (273)
- Światło odbłysków (273)
- Złóżmy to razem (274)
- Materiały w rzeczywistym świecie (275)
- Właściwości materiału (275)
- Oświetlanie materiałów (275)
- Obliczanie efektów światła otaczającego (276)
- Efekty światła rozpraszającego i odbłysków (277)
- Umieszczenie światła w scenie (277)
- Włączanie oświetlenia (277)
- Przygotowanie modelu oświetlenia (278)
- Przygotowanie właściwości materiału (279)
- Używanie źródła światła (281)
- Gdzie jest góra? (282)
- Normalne do powierzchni (283)
- Określanie normalnej (283)
- Normalne jednostkowe (285)
- Znajdowanie normalnej (286)
- Przygotowanie źródła światła (288)
- Przygotowanie właściwości materiału (289)
- Rysowanie wielokątów (289)
- Efekty oświetlenia (291)
- Odbłyski (291)
- Światło odbłysków (291)
- Właściwości odbłysków materiału (292)
- Stopień połyskliwości (293)
- Uśrednianie normalnych (294)
- Światła punktowe (298)
- Tworzenie światła punktowego (299)
- Rysowanie światła punktowego (301)
- Cienie (302)
- Czym jest cień? (303)
- Kod "zgniatający" (304)
- Przykład cienia (305)
- Oświetlenie i tryb indeksu koloru (308)
- Podsumowanie (308)
- Podręcznik (309)
- glColorMaterial (309)
- glCullFace (310)
- glFrontFace (310)
- glGetMaterial (311)
- glGetLight (312)
- glLight (314)
- glLightModel (315)
- glMaterial (317)
- glNormal (318)
- Określenie zadania (321)
- Wybór rzutowania (322)
- Wybór oświetlenia i właściwości materiału (323)
- Wyświetlanie rezultatu (324)
- Konstruowanie modelu po kawałku (325)
- Główka (325)
- Trzpień (328)
- Gwint (332)
- Składanie modelu w całość (335)
- Test szybkości (336)
- Poprawianie wydajności (340)
- Tworzenie listy wyświetlania (340)
- Podsumowanie (343)
- Podręcznik (343)
- glCallList (343)
- glCallLists (344)
- glDeleteLists (345)
- glEndList (346)
- glGenLists (346)
- glIsList (347)
- glListBase (348)
- glNewList (349)
- Rysowanie bitmap (351)
- Czcionki bitmapowe (355)
- Budowanie prostej biblioteki czcionek (355)
- Pixmapy: bitmapy z kolorem (359)
- Rysowanie pixmap (359)
- Remapowanie kolorów (360)
- Tablice odwzorowań kolorów (361)
- Skalowanie pixmapy (362)
- Wykrawanie obszarów (362)
- Odczytywanie pixmap z ekranu (363)
- Kopiowanie pixmap (366)
- Przeglądarka plików bitmap (366)
- Pliki bitmap w Windows (367)
- Odczyt plików .BMP (368)
- Zapis pliku .BMP (370)
- Drukowanie bitmap (372)
- Wyświetlanie bitmapy (375)
- Podsumowanie (377)
- Podręcznik (377)
- glCopyPixels (377)
- glDrawPixels (378)
- glPixelMap (379)
- glPixelStore (380)
- glPixelTransfer (382)
- glPixelZoom (383)
- glReadPixels (384)
- Podstawy nakładania tekstur (388)
- Definiowanie obrazów tekstur (389)
- Definiowanie tekstur 1D (389)
- Definiowanie tekstur 2D (391)
- Rysowanie wielokątów z nałożoną teksturą (392)
- Mipmapy (394)
- Program oglądania terenu (397)
- Definiowanie terenu (397)
- Rysowanie terenu (397)
- Rysowanie sceny (400)
- Automatyczne generowanie współrzędnych tekstur (401)
- Lot nad terenem (402)
- Podsumowanie (402)
- Podręcznik (429)
- glTexCoord (429)
- glTexEnw (429)
- glTexGen (430)
- glTexImage1D (431)
- glTexImage2D (432)
- glTexParameter (433)
- Tworzenie kwadryk (436)
- Zmiana sposobu rysowania kwadryki (436)
- Rysowanie cylindrów (437)
- Rysowanie stożków (438)
- Teksturowanie cylindrów (438)
- Rysowanie dysków (438)
- Teksturowanie dysku (439)
- Rysowanie częściowych dysków (439)
- Rysowanie sfer (439)
- Teksturowanie sfer (440)
- Rysowanie ołówka (440)
- Podsumowanie (442)
- Podręcznik (451)
- gluCylinder (451)
- gluDeleteQuadric (452)
- gluDisk (452)
- gluNewQuadric (453)
- gluPartialDisk (453)
- gluQuadricCallback (454)
- gluQuadricDrawStyle (454)
- gluQuadricNormals (455)
- gluQuadricOrientation (455)
- gluQuadricTexture (456)
- gluSphere (456)
Rozdział 14. Maszyna stanu OpenGL (461)
- Podstawowe zmienne stanu OpenGL (461)
- Zachowywanie i odtwarzanie zmiennych stanu (462)
- Stan rysowania (464)
- Stan bufora głębokości (465)
- Stan bufora szablonu (465)
- Stan oświetlenia (465)
- Stan teksturowania (466)
- Stan pikseli (467)
- Podręcznik (468)
- glDisable / glEnable (468)
- glIsEnabled (470)
- glPopAttrib (470)
- glPushAttrib (470)
- Czym są bufory? (473)
- Konfigurowanie buforów (474)
- Bufor koloru (477)
- Podwójne buforowanie (477)
- Buforowanie stereo (478)
- Przerzucanie buforów (478)
- Bufor głębokości (479)
- Porównywanie głębokości (479)
- Wartości głębokości (481)
- Zastosowania bufora głębokości (481)
- Inne zastosowanie bufora głębokości (484)
- Wycinanie fragmentów sceny (485)
- Bufor szablonu (489)
- Korzystanie z bufora szablonu (489)
- Funkcje bufora szablonu (489)
- Rysowanie w buforze szablonu (490)
- Bufor akumulacji (494)
- Użycie bufora akumulacji w celu zasymulowania rozmycia ruchu (495)
- Użycie bufora akumulacji do antyaliasingu (498)
- Podręcznik (499)
- glAccum (499)
- glClearColor (500)
- glClearDepth (500)
- glClearIndex (501)
- glClearStencil (501)
- glDrawBuffer (501)
- glDepthFunc (502)
- glDepthRange (503)
- Blending (505)
- Efekt przezroczystości przez łączenie kolorów (507)
- Łączenie kolorów przy antyaliasingu (511)
- Łączenie kolorów w programach rysunkowych (511)
- Mgła (520)
- Rysowanie imbryków cieniowanych w zależności od głębokości (521)
- Inne rodzaje mgły (524)
- Głębokość mgły (524)
- Powrót do programu przeglądania terenu (525)
- Podsumowanie (530)
- Podręcznik (530)
- glBlendFunc (530)
- glFog (531)
- Krzywe i powierzchnie (534)
- Reprezentacja parametryczna (534)
- Punkty kontrolne (535)
- Ciągłość (536)
- Obliczenia (537)
- Dwuwymiarowa krzywa (537)
- Obliczanie krzywej (540)
- Powierzchnia trójwymiarowa (541)
- Oświetlenie i normalne (544)
- NURBS (545)
- Od krzywych Beziera do krzywych B-sklejanych (545)
- Węzły (546)
- Tworzenie powierzchni NURBS (546)
- Właściwości obiektów NURBS (547)
- Definiowanie powierzchni (547)
- Wycinanie (549)
- Podsumowanie (551)
- Podręcznik (551)
- glEvalCoord (551)
- glEvalMesh (552)
- glEvalPoint (553)
- glGetMap (553)
- glMap (555)
- glMapGrid (558)
- gluBeginCurve (559)
- gluBeginSurface (560)
- gluBeginTrim (560)
- gluDeleteNurbsRenderer (561)
- gluEndCurve (562)
- gluEndSurface (563)
- gluEndTrim (563)
- gluGetNurbsProperty (563)
- gluLoadSamplingMatrices (564)
- gluNewNurbsRenderer (565)
- gluNurbsCallback (566)
- gluNurbsCurve (568)
- gluNurbsProperty (569)
- gluNurbsSurface (571)
- gluPwlCurve (572)
- Złożone wielokąty (575)
- Rysowanie wielokątów wklęsłych (576)
- Rysowanie wielokątów złożonych (577)
- Funkcje zwrotne (581)
- Podsumowanie (582)
- Podręcznik (583)
- gluBeginPolygon (583)
- gluDeleteTess (583)
- gluEndPolygon (583)
- gluNewTess (584)
- gluNextContour (584)
- gluTessCallback (585)
- gluTessVertex (585)
- Selekcja (588)
- Nazywanie prymitywów (588)
- Praca w trybie selekcji (590)
- Bufor selekcji (590)
- Wybieranie (592)
- Wybór hierarchiczny (594)
- Sprzężenie zwrotne (598)
- Bufor sprzężenia zwrotnego (598)
- Dane sprzężenia zwrotnego (599)
- Znaczniki użytkownika (600)
- Przykład (600)
- Nadawanie obiektom etykiet na potrzeby sprzężenia zwrotnego (601)
- Krok 1: wybranie obiektu (602)
- Krok 2: pobieranie informacji o narysowanych obiektach (603)
- Podsumowanie (605)
- Podręcznik (605)
- glFeedbackBuffer (605)
- glInitNames (607)
- glLoadName (607)
- glPassThrough (608)
- glPopName (609)
- glPushName (609)
- glRenderMode (610)
- glSelectBuffer (612)
- gluPickMatrix (613)
- Na styku dwóch światów (615)
- Dwuwymiarowa nawigacja (616)
- VRML (617)
- WebSpace (618)
- Instalacja (618)
- Tryb spacerowy (618)
- Tryb oglądania (620)
- Open Inventor i VRML (622)
- Podsumowanie (622)
Rozdział 21. OpenGL i MFC (627)
- Wydzielenie kodu związanego z OpenGL (628)
- Zaczynamy od AppWizarda (629)
- Budowanie szkieletu (629)
- Dodawanie bibliotek (630)
- Przygotowanie klasy widoku dla OpenGL (631)
- Format pikseli i kontekst renderowania (632)
- Usuwanie kontekstu renderowania (634)
- Obsługa zmiany rozmiaru okna (634)
- Renderowanie sceny (634)
- Unikanie niepotrzebnego czyszczenia okna (635)
- Obsługa palety (635)
- Podsumowanie (639)
- Wydzielenie kodu związanego z OpenGL (642)
- Zaczynamy od AppExperta (643)
- Budowanie szkieletu (643)
- Dodawanie nagłówków (645)
- Dodawanie procedur obsługi komunikatów (645)
- Wypełnianie szkieletu aplikacji (646)
- Przygotowanie klasy widoku dla OpenGL (647)
- Format pikseli i kontekst renderowania (647)
- Usuwanie kontekstu renderowania (649)
- Obsługa zmiany rozmiaru okna (649)
- Renderowanie sceny (650)
- Unikanie niepotrzebnego czyszczenia okna (650)
- Niech się kręci (651)
- Obsługa palety (652)
- Podsumowanie (656)
- Wymagany dostęp niskiego poziomu (657)
- Magia obiektów (658)
- Plug and Play (659)
- Wydzielenie kodu OpenGL (659)
- Działanie i sposób użycia kontrolki WaiteGL.OCX (659)
- Znaczniki OpenGL (660)
- Instalacja i użycie kontrolki WaiteGL w Visual Basicu 6.0 (661)
- Instalowanie kontrolki (661)
- Przykład w Visual Basicu (662)
- Malowanie w oknie OpenGL (663)
- Trochę ruchu (664)
- Wykorzystanie kontrolki OCX w Delphi 2.0 (665)
- Instalowanie kontrolki (665)
- Przykład w Delphi (665)
- Malowanie w oknie OpenGL (667)
- Trochę ruchu (667)
- Parę uwag na temat kodu źródłowego (668)
- Podsumowanie (669)
- Wnioski (674)
Dodatek A. Poprawianie wydajności OpenGL w Windows (679)
- Listy wyświetlania (679)
- Operacje na macierzach (680)
- Operacje związane z oświetleniem (680)
- Konstruowanie obiektów (680)
- Inne rady (681)
- Książki na temat programowania Windows (683)
- Książki i materiały na temat OpenGL (684)
- Książki komputerowe na temat programowania grafiki (w szczególności 3D) (684)
- Serwery FTP i WWW związane z OpenGL (684)
- Składnice VRML (685)
Dodatek D. Słownik (689)
Skorowidz (695)