POLECAMY
Wydawca:
Format:
ibuk
Książka wprowadza czytelnika w świat grafiki komputerowej czasu rzeczywistego oraz modelowania i symulowania rzeczywistości na jej potrzeby. Przedstawiono w niej wiedzę z zakresu podstawowych technik grafiki komputerowej, podstaw fizyki klasycznej oraz metod numerycznych.
Książka składa się z 4 części:
Integralną częścią książki są przykłady i zadania, które można nieodpłatnie pobrać z zakładki DO POBRANIA.
Rok wydania | 2010 |
---|---|
Liczba stron | 700 |
Kategoria | Programowanie |
Wydawca | Wydawnictwo Naukowe PWN |
ISBN-13 | 978-83-01-16178-1 |
Numer wydania | 1 |
Język publikacji | polski |
Informacja o sprzedawcy | ePWN sp. z o.o. |
POLECAMY
Ciekawe propozycje
Spis treści
Wstęp | 11 |
Część I. Grafika trójwymiarowa w OpenGL | 13 |
Rozdział 1. Inicjacja okna dla grafiki 3D generowanej za pomocą OpenGL | 15 |
Visual C++ i WinAPI/WGL | 17 |
Tworzenie projektu i dostosowywanie go do współpracy z OpenGL | 17 |
Tworzenie okna za pomocą funkcji WinAPI | 19 |
Przystosowanie okna do współpracy z OpenGL za pomocą funkcji biblioteki WGL | 25 |
Przygotowanie i rysowanie sceny (wreszcie OpenGL!) | 27 |
Visual C++ i MFC | 31 |
C++Builder i VCL | 35 |
Tryb pełnoekranowy | 36 |
Rozdział 2. Macierze w OpenGL | 41 |
Macierz rzutowania | 42 |
Macierz model-widok | 44 |
Stosy macierzy | 48 |
Współrzędne jednorodne | 51 |
Odczytywanie wartości macierzy | 56 |
Rozdział 3. Rysowanie i animacja figur i brył | 59 |
Wyodrębnianie metody służącej do budowania aktorów | 63 |
Kolor | 66 |
Funkcja glColor | 66 |
Cieniowanie | 66 |
Kolor tła | 67 |
Model 1: Prostopadłościan | 68 |
Unikanie rysowania tylnych powierzchni | 72 |
Model 2: Niszczyciel gwiazd | 74 |
Podłoże | 77 |
Listy wyświetlania | 79 |
Animacja | 81 |
Rozdział 4. Kontrola położenia kamery | 85 |
„Rozglądanie się”, czyli kamera w centrum (FPP) | 86 |
Ruch w poziomie kontrolowany klawiszami | 90 |
Ruch kamery po sferze z wyróżnioną płaszczyzną (TPP) | 93 |
Przesuwanie kamery myszą | 94 |
Kontrola odległości kamery od modelu za pomocą rolki myszy | 95 |
Rotacja sferyczna | 96 |
Implementacja rotacji sferycznej | 98 |
Użycie klasy ArcBall | 105 |
Wektor położenia kamery | 110 |
Swobodne obroty kamery | 111 |
Jeszcze raz o rzutowaniu | 117 |
Rozdział 5. Oświetlenie | 119 |
Trójwymiarowa przestrzeń barw | 119 |
System oświetlenia OpenGL. Światło tła | 121 |
Model oświetlenia Phonga | 124 |
Model Lamberta światła rozproszonego | 125 |
Model rozbłysku Phonga | 127 |
Uśrednianie normalnych | 129 |
Definiowanie wektorów normalnych | 130 |
Definiowanie źródła światła rozproszonego | 134 |
Uśrednianie i interpolacja normalnych | 138 |
Rozbłysk | 140 |
Mieszanie kolorów (alpha blending) | 142 |
Sortowanie ścian | 145 |
Rozdział 6. Odwzorowywanie tekstur | 153 |
Proste teksturowanie | 154 |
Wiązanie tekstur (współrzędne teksturowania) | 158 |
Wiele tekstur | 160 |
Przezroczyste tekstury | 163 |
Wczytywanie tekstur z plików (bitmap) | 165 |
Czytanie tekstur z zasobów aplikacji | 172 |
Lakierowanie tekstur | 173 |
Układanie tekstur obok siebie | 175 |
Rozdział 7. Napisy | 177 |
Tworzenie czcionek do wyświetlania napisów | 177 |
Używanie czcionek bitmapowych | 179 |
Używanie czcionek 3D | 183 |
Rozdział 8. Biblioteka GLU | 185 |
Kwadryki | 185 |
Teksturowanie kwadryki | 188 |
Inne kwadryki | 190 |
GLU i macierze | 194 |
gluLookAt | 194 |
gluPerspective | 195 |
Inne | 196 |
Rozdział 9. Bufor szablonowy | 199 |
Przygotowanie sceny | 199 |
Płaszczyzny obcinające | 201 |
Przygotowanie szablonu | 203 |
Użycie szablonu do przycięcia odbicia | 205 |
Rozdział 10. Szablon projektów korzystających z grafiki OpenGL | 209 |
Zadania | 213 |
Część II. Wizualizacja danych | 215 |
Rozdział 11. Wizualizacja obiektów przestrzennych na przykładzie molekuł białek | 217 |
Zadanie | 217 |
Format PDB | 217 |
Odczyt danych z pliku PDB | 219 |
Klasa Atom | 220 |
Klasa PDB | 222 |
Wizualizacja | 224 |
Położenie atomów | 225 |
Wiązania chemiczne | 229 |
Wybór atomu i wyświetlanie etykiety, czyli interakcja z użytkownikiem w OpenGL | 232 |
Stos nazw | 233 |
Renderowanie w trybie zaznaczania | 235 |
Odczytywanie informacji z bufora zaznaczania | 237 |
Wyróżnianie wybranego atomu | 238 |
Rozdział 12. Wizualizacja funkcji dwóch zmiennych | 241 |
Format plików z danymi | 242 |
Klasy reprezentujące wczytywane dane | 244 |
Czytanie danych | 247 |
Wczytywanie parametrów programu z pliku | 247 |
Wczytywanie parametrów sieci z pliku | 250 |
Wczytywanie danych | 252 |
Przygotowanie wykresu | 253 |
Wyznaczenie zakresu tablicy, w którym znajdują się dane do wyświetlania | 253 |
Wyznaczenie wartości minimalnej i maksymalnej | 254 |
Wyznaczenie współczynnika skalowania | 255 |
Wyznaczenie koloru odpowiadającego wartości funkcji | 255 |
Wyświetlenie danych | 257 |
Destruktor klasy | 263 |
Osie układu współrzędnych | 264 |
Rysowanie osi | 264 |
Opis osi | 266 |
Oświetlenie | 268 |
Źródło światła | 268 |
Sterowanie pozycją źródła światła | 270 |
Rozdział 13. Trójwymiarowa wizualizacja z wykorzystaniem teksturowania przeźroczystego | 275 |
Tomografia optyczna | 275 |
Wczytywanie danych | 276 |
Metoda wizualizacji za pomocą przeźroczystego teksturowania | 279 |
Mapy kolorów | 281 |
Przygotowanie powierzchni do teksturowania | 285 |
Przygotowanie tekstur | 288 |
Regulacja jasności, kontrastu i przeźroczystości | 296 |
Część III. Świat modelowany zbiorem punktów materialnych | 299 |
Rozdział 14. Dynamika punktu | 301 |
Ruch | 301 |
Siła | 302 |
Równania ruchu | 303 |
Przykładowe rozwiązanie | 304 |
Zamiana na równania pierwszego stopnia | 305 |
Rozdział 15. Metody numeryczne, czyli dyskretyzacja równań ruchu | 307 |
Szereg Taylora | 307 |
Algorytm Eulera | 309 |
Algorytm Verleta | 311 |
Rozdział 16. Implementacja | 313 |
Klasa TPunktMaterialny | 313 |
Implementacja algorytmów Eulera i Verleta | 317 |
Klasa ZbiorPunktowMaterialnych | 320 |
Definiowanie układu punktów materialnych | 324 |
Wizualizacja punktów | 325 |
Dynamika punktów | 327 |
Wstrzymywanie symulacji | 330 |
Mechanizm odświeżania sceny w symulacjach | 330 |
Rozdział 17. Modelowanie układów elastycznych | 333 |
Zbiór oscylatorów | 333 |
Rysowanie linii | 337 |
Tłumienie | 339 |
Sztywność | 342 |
Lina | 346 |
Dalsi sąsiedzi | 348 |
Włos | 349 |
Podłoże | 351 |
Rozdział 18. Siły kontaktowe | 357 |
Reakcja na kontakt z obszarem niedostępnym | 357 |
Wzory | 359 |
Tarcie | 360 |
Implementacja obszaru niedostępnego | 361 |
Abstrakcyjny typ danych | 361 |
Podłoże | 363 |
Kula | 364 |
Dwa inne przykłady | 365 |
Zbiór punktów materialnych z obszarem niedostępnym | 370 |
Przykłady układów z obszarami niedostępnymi | 375 |
Punkty uderzające w kulę | 375 |
Lina na podłożu | 378 |
Lina opadająca na stolik | 379 |
Łączenie dwóch obszarów zabronionych | 383 |
Układy dwuwymiarowe | 384 |
Siatka, czyli kawałek tkaniny | 384 |
Pierwszy test i metody rysowania siatki | 388 |
Siatka w kontakcie z obszarem niedostępnym | 392 |
Układ trójwymiarowy, czyli dynamika brył miękkich | 393 |
Rozdział 19. Zderzenie dwóch punktów | 399 |
Fizyka zderzenia dwóch kul | 399 |
Zasady zachowania energii i pędu w zderzeniach | 400 |
Dynamika niecentralnego zderzenia dwóch kul | 403 |
Projekt testu | 405 |
Uproszczenia | 406 |
Implementacja zderzenia dwóch kul | 407 |
Pudło | 412 |
Dwa testy obnażające wady naiwnej implementacji | 413 |
Implementacja zderzeń niecentralnych | 415 |
Symulacja ruchów Browna | 417 |
Rozdział 20. Zderzenia punktów z tkaniną | 419 |
Wykrywanie kolizji punktu z trójkątem | 419 |
Czy odcinek przecina płaszczyznę? | 419 |
Gdzie odcinek przecina płaszczyznę? | 421 |
Czy punkt przecięcia znajduje się wewnątrz trójkąta? | 422 |
Modelowanie reakcji tkaniny i punktów na zderzenie | 424 |
Implementacja wody i tkaniny | 425 |
Implementacja wykrywania zderzeń | 428 |
Implementacja reakcji na zderzenia | 432 |
Rozdział 21. Sterowanie | 435 |
Przeciąganie punktu myszą | 435 |
Kontrola obiektu za pomocą klawiatury, czyli trening intuicji fizycznej | 442 |
Bilard | 447 |
Klasa Bilard | 447 |
Rysowanie bil, stołu i kija | 451 |
Implementacja kija | 452 |
Implementacja łuz | 456 |
Rozdział 22. O dwóch trikach używanych w symulacjach cząsteczkowych | 461 |
Jakie problemy chcemy rozwiązać? | 461 |
Grawitacja | 461 |
Dwa triki | 462 |
Odcięcie i podział na komórki | 462 |
Periodyczne warunki brzegowe | 463 |
Implementacja | 464 |
Klasa Galaktyka | 464 |
Wizualizacja | 467 |
Naiwna implementacja oddziaływań | 468 |
Podział obszaru na „komórki” | 469 |
Implementacja periodycznych warunków brzegowych | 474 |
Przejście przez granicę | 474 |
Obliczanie odległości | 475 |
Zadania | 477 |
Część IV. Obiekty modelowane zespołem brył sztywnych | 481 |
Rozdział 23. Dynamika bryły sztywnej | 483 |
Środek masy | 483 |
Kinematyka bryły sztywnej | 485 |
Prędkość liniowa i prędkość kątowa | 485 |
Rotujący układ odniesienia | 485 |
Dynamika bryły sztywnej, czyli równania Newtona w ruchu postępowym i obrotowym | 489 |
Moment pędu | 489 |
Moment bezwładności | 490 |
Moment siły i równanie ruchu | 493 |
Czego brakuje w równaniach ruchu? | 495 |
Moment bezwładności prostopadłościanu | 496 |
Macierz obrotu | 498 |
Całkowanie prędkości kątowej | 499 |
Rozdział 24. Implementacja metody Eulera dla dynamiki bryły sztywnej | 503 |
Metoda numeryczna | 503 |
Implementacja klas opisujących bryły sztywne | 504 |
Szablon klasy TBrylaSztywna | 504 |
Przykład bryły sztywnej: klasa Prostopadloscian | 509 |
Menedżer zbioru brył sztywnych | 510 |
Zbiór prostopadłościanów | 514 |
Wizualizacja | 515 |
Rozdział 25. Kwaterniony | 519 |
Algebra kwaternionów | 520 |
Kwaterniony jednostkowe | 524 |
Konwersja między kwaternionem i macierzą | 528 |
Pochodna kwaternionu i równanie ruchu | 531 |
Implementacja dynamiki opartej na kwaternionach | 533 |
Dwa testy | 537 |
Kąty Eulera, kwaterniony i macierze obrotu | 538 |
Rozdział 26. Detekcja kolizji: obszary ograniczające | 541 |
Sfery ograniczające (BS) | 541 |
Prostopadłościany ograniczające ustawione wzdłuż osi sceny (AABB) | 546 |
Twierdzenie SAT | 551 |
Twierdzenie SAT w przypadku prostopadłościanów OBB | 553 |
Czytelna implementacja SAT dla prostopadłościanów OBB | 556 |
Optymalizacja implementacji SAT | 558 |
Rozdział 27. Detekcja kolizji: wyznaczanie punktu styku oraz normalnej i stycznej zderzenia | 567 |
Normalna zderzenia dwóch prostopadłościanów | 569 |
Punkt zderzenia dwóch prostopadłościanów | 573 |
Zderzenie wierzchołka ze ścianą | 573 |
Zderzenie dwóch krawędzi | 574 |
Odległość dwóch prostych | 578 |
Podsumowanie | 581 |
Styczna zderzenia dwóch prostopadłościanów | 582 |
Rozdział 28. Fizyka zderzeń brył sztywnych | 585 |
Popęd liniowy, czyli zasada zachowania pędu | 585 |
Popęd kątowy, czyli zasada zachowania momentu pędu | 586 |
Współczynnik restytucji, czyli zasada (nie)zachowania energii | 587 |
Rozwiązanie | 587 |
Tarcie | 589 |
Implementacja | 590 |
Zadania | 593 |
Wybrana literatura tematu | 595 |
Mechanika | 595 |
Geometria obliczeniowa (w tym detekcja kolizji) | 596 |
OpenGL i grafika 3D | 596 |
Metody numeryczne | 597 |
Prace inżynierskie i dyplomowe wykorzystane w książce | 598 |
Dodatek A. Korzystanie z biblioteki GLUT do zarządzania oknem w projektach przenośnych | 599 |
GLUT (Visual C++) | 600 |
Tworzenie okna OpenGL za pomocą GLUT | 600 |
Interakcja z użytkownikiem | 606 |
GLUT w C++Builder | 611 |
Kompilacja projektu korzystającego z GLUT za pomocą g++ w systemie Linux i powłoce Cygwin | 612 |
Dodatek B. Macierz rzutowania punktu na płaszczyznę | 613 |
Dodatek C. Wczytywanie modelu z pliku OBJ | 619 |
Opis formatu Wavefront OBJ | 619 |
Klasy CScena i CModel | 622 |
Rysowanie wczytanej sceny. Klasa CScenaRysowana | 634 |
Przykładowy projekt | 637 |
Dodatek D. Klasy implementujące wektor, macierz i kwaternion | 643 |
Wektor | 643 |
Projekt interfejsu | 643 |
Definicja klasy i jej pola | 644 |
Operator indeksowania | 645 |
Konwersja do tablicy | 646 |
Operatory relacji | 647 |
Operatory arytmetyczne | 647 |
Iloczyny wektorów | 649 |
Metody | 651 |
Konkretyzacja | 652 |
Testy | 653 |
Macierz kwadratowa 3×3 | 656 |
Przechowanie i dostęp do elementów macierzy | 657 |
Operatory | 660 |
Metody | 663 |
Testy | 668 |
Kwaternion | 670 |
Pola i konstruktory | 670 |
Operatory | 671 |
Metody | 673 |
Testy | 677 |
Funkcja TworzMacierzObrotuZKataIOsiObrotu | 679 |
Dodatek E. Animacja szkieletowa | 681 |
Kości i stawy | 683 |
Projektowanie szkieletu | 685 |
Rysowanie ręki | 687 |
Modelowanie ułożenia | 690 |
Modelowanie animacji | 691 |
Indeks | 695 |