Programowanie gier komputerowych
Informatyka - 2013/2014

Wykłady

  1. Game loop - Podstawowy element silnika gry komputerowej 2014-02-27

    Materiały do pobrania:

    Dodatkowe linki:

  2. Współczesny OpenGL - Definicja geometrii2013-04-04

    Materiały do pobrania:

    Dodatkowe linki:

  3. Współczesny OpenGL - Transformacje geometryczne, programy cieniujące (shadery)2013-04-18

    Materiały do pobrania:

    Dodatkowe linki:

Laboratoria

  1. System kontroli wersji na przykładzie SVN

    Klient SVN:

    Darmowy hosting SVN:

  2. Wyświetlanie powierzchni terenu, wykorzystanie VBO

    Podczas laboratoriów zaprezentowane zostanie praktyczne zastosowanie Vertex Buffer Object (VBO). Zadaniem jest wyświetlenie mapy wysokości jako trójwymiarowej powierzchni terenu.

    Cel: narysować całą mapę, najlepiej z użyciem pojedynczego żądania renderowania, wykorzystując do tego jak najmniej pamięci graficznej i minimalizując ilość danych wysyłaną w każdej klatce do karty graficznej.

    Podpowiedzi:

    1. Mapę wysokości najefektywniej jest zazwyczaj rysować z użyciem prymitywu TRIANGLE STRIP. Warto zwrócić uwagę na możliwość rysowania zdegenerowanych trójkątów (o zerowej powierzchni), aby przejść do kolejnego wiersza.
    2. Warto posłużyć się Index Buffer Object (IBO) w celu określenia kolejności wierzchołków.
    3. Wygodnym pierwszym krokiem milowym jest wyświetlenie zawartości całej odczytanej heightmapy za pomocą prymitywu POINTS. Dla bezpieczeństwa lepiej wtedy wyłączyć oświetlenie i ustawić dla punktów na stałe jakiś kolor inny od tła.
    4. Może się przydać odczytywanie z pliku bezpośrednio do struktury znajdującej się w pamięci - życie stanie się wtedy prostsze.

    Format pliku MAP:

    Jest to plik binarny. Jego zawartość wygląda następująco, kolejno począwszy od zerowego bajtu:

    • 4 bajty - int - szerokość mapy
    • 4 bajty - int - wysokość mapy
    • Wierzchołki (szerokość × wysokość) - dla każdego:
      • 4 bajty - float - wysokość w punkcie mapy
      • 4 bajty - float - X wektora normalnego
      • 4 bajty - float - Y wektora normalnego
      • 4 bajty - float - Z wektora normalnego
      • 4 bajty - float - U współrzędna tekstury
      • 4 bajty - float - V współrzędna tekstury

    Jak łatwo obliczyć, wielkość całego pliku to 8 + 4 * W * H bajtów.

    Materiały:

    Mapy:

  3. System cząsteczkowy, wykorzystanie Geometry Shader

    Zaprezentowane zostanie praktyczne wykorzystanie Geometry Shadera. Posłuży on do tego, by zamienić pojedyncze wierzchołki w czworokąty stanowiące wizualną reprezentację cząstek emitowanych przez system cząsteczkowy.

    Zadaniem jest stworzenie prostego systemu cząsteczkowego, który będzie zarządzał emisją, życiem oraz unicestwieniem cząstek mających imitować dym unoszący się ponad obiektem kontrolowanym przez użytkownika.

    Cząstki powinny:

    • Mieć ograniczoną długość życia po której płynnie znikają
    • Poruszać się w skoordynowany sposób, ale opatrzony elementem losowości
    • Wykorzystywać przezroczystość (alpha blending)

    Aby uzyskać miękkie krawędzie cząstek, można np. posłużyć się funkcją gaussowską we fragment shaderze albo użyć tekstury na podstawie której zostanie określona wartość komponentu alpha (drugie rozwiązanie jest lepsze pod względem wydajności). Sugerowane jest też nałożenie na cząstkę tekstury szumu, np. perlinowskiego.

    Materiały:

    Oczekiwany rezultat:

  4. Animacja ruchu z wykorzystaniem krzywych Catmulla-Roma

    Zadaniem jest zaimplementowanie poruszania się po ścieżce danej punktami węzłowymi. Obiekt (w naszym przypadku kula) powinien w nieskończony sposób płynnie przemierzać odcinki kolejno pomiędzy punktami węzłowymi ścieżki.

    Należy wykorzystać metodę interpolacji, która zapewni że ruch obiektu będzie wydawał się naturalny i przebiegać będzie po krzywej o klasie ciągłości C1 ("gładkiej", nieposiadającej "ostrych narożników", pierwsze pochodne są ciągłe). Ważne jest też, aby wynikowa ścieżka ruchu przechodziła dokładnie przez punkty węzłowe.

    Te warunki są spełnione m.in. przez bardzo wygodne krzywe Catmulla-Roma, które wymagają jedynie określenia punktu początkowego, końcowego danego odcinka oraz punktu poprzedzającego ten odcinek i punktu następującego po tym odcinku. Innymi słowy, wystarczy że są dane cztery punkty: pn-1, pn, pn+1, pn+2 oraz krok t=0..1, by możliwe było wyznaczenie współrzędnych interpolowanego punktu leżącego na segmencie krzywej pomiędzy pn a pn+1.

    Sugerowane etapy rozwiązywania problemu:

    • Przemieszczanie się w czasie do kolejnych punktów węzłowych ("przeskakiwanie")
    • Liniowa interpolacja w celu zapewnienia płynności ruchu
    • Interpolacja z użyciem krzywych sklejanych, np. Catmulla-Roma
    • Zachowanie orientacji obiektu zgodnej z kierunkiem ruchu

    Materiały:

    Oczekiwany rezultat:

Kontakt

mgr inż. Bartosz Bazyluk
bbazyluk@wi.zut.edu.pl
Pokój 322 WI2

Konsultacje

(semestr letni 2013/2014)
wtorek godz. 10.15, 2WI322

Przewiń do...