Aleksander Denisiuk. Materiały dydaktyczne PJWSTK

Przekształcenia w OpenGL

  1. .. (Powrót)
  2. Cube.zip Pobierz projekt, wyświetlający animowany sześcian
    1. przeanalizuj kod:
      • jak zaprogromowano, że strzałki zmieniają prędkość obrotu?
      • jak do shadera są przekazywane macierze?
      • jak do shadera są przekazywane wierzchołki?
      • jak do shadera są przekazywane indeksy?
    2. skompiluj i uruchom
    3. pobaw się trochę programem
    4. opcje linkera dla Code::Blocks w systemie Windows: -lglfw3 -lglew32 -lopengl32 jak na rysunku
    5. opcje linkera dla Code::Blocks w systemie Linux: -lX11 -lglfw -lGL -lGLU -lGLEW
    6. zmienna DEBUG w  ustawieniach Code::Blocks na rysunku
  3. K-dron.png (3 punkty) Napisz program, wyświetlający k-dron.
  4. K-drona.png (3 punkty) Zaprogramuj możliwość obrotu k-dronu: niech strałki Left, Right, Up, Down obracają k-dron stosownie w lewo, w prawo, w górę, w dół
  5. K-dronb.png (3 punkty) Rozbuduj program. Niech klawisz Page Up zbliża, zaś Page Down — oddala kamerę
  6. K-dron.png (3 punkty) Dodaj możliwość przełączenia projekcji perspektywicznej (klawisz Home) i prostopadłej (klawisz End). Przypomnę, że macierz projekcji prostopadłej dla bryły widzenia {lxrbytn-zf jest następująca: (2r-l00-r+lr-l02t-b0-t+bt-b00-2f-n-f+nf-n0001)Czy twój program radzi sobie ze zmianą rozmiaru okna?
  7. image/svg+xml Czynności:
    1. Narysuj k-dron na kartce, ponumeruj wszystkie wierzchołki, podpisz ich współrzędne i utwórz tablicę wierzchołków.
    2. Narysuj każdą z jedenastu ścian, podziel na trójkąty i utwórz tablicę indeksów.
    3. Dopasuj polecenie renderowania w funkcji Draw().
    4. Zatrzymuj animację (funkcja Run() obiektu klasy Window).
    5. Uzupenij k-dron w metody Left(), Right(), Up(), Down(). Wykorzystaj te metody w callbacku na zdarzenia klawiatury klasy Window. Opracuj obydwa zdarzenia.
    6. Działania na kamerze zaimplementuj na macierzy view_matrix_ klasy Window. Pamiętaj odpalić procedurę SetViewMatrix(), aby zaktualizować macierz w karcie graficznej. Czemu nie robiliśmy tego z macierzą model_matrix w metodach Left(), Right(), etc?
    7. Zmiana rzutowania: macierz projection_matrix_ klasy Window. Uzupełnij klasę matma w metodę CreateOrthoProjectionMatrix podobną do metody CreatePerspectiveProjectionMatrix. Pamiętaj odpalić procedurę SetProjectionMatrix(), aby zaktualizować macierz w karcie graficznej.
  8. Nvidia.png Uwaga o kartach Nvidia: jeżeli animacja jest spowolniona, można odznaczyć opcję Sync to VBlank. Czy wiesz, co ta opcja znaczy?
  9. Termin oddania zadań:
    • klasowych: na zajęciach. Zadania, oddane po terminie, warte są połowę punktów
    • domowych: do momentu, gdy się pojawi następne zadanie. Zadania, oddane po terminie, warte są 0 (słownie: zero) punktów
    • W każdym mailu z zadaniem podać pseudonim