Skip to content

Słownik Techniczny i Pojęcia

W poniższej sekcji wyjaśniamy kluczowe mechanizmy graficzne i algorytmiczne zastosowane wewnątrz kodu silnika.

AABB (Axis-Aligned Bounding Box)

AABB to najprostszy i najszybszy sposób detekcji kolizji 3D. Wykorzystuje prostopadłościany (pudełka), których ściany są zawsze równoległe do osi układu współrzędnych (X, Y, Z). Nie obracają się.

W naszym kodzie, klasa GameObject sprawdza przecięcia na poszczególnych osiach. Kolizja zachodzi, gdy obiekty nachodzą na siebie we wszystkich trzech wymiarach jednocześnie. * Sprawdzenie X: \(x_1 - \frac{w_1}{2} < x_2 + \frac{w_2}{2}\) oraz \(x_1 + \frac{w_1}{2} > x_2 - \frac{w_2}{2}\) * Podejście to gwarantuje ekstremalną wydajność przy 60 klatkach fizyki na sekundę.

VBO (Vertex Buffer Object)

VBO to technika przechowywania geometrii, która definiuje nowoczesnego OpenGL'a. Kiedyś rysowało się obiekty, wysyłając każdy wierzchołek osobno przez procesor (CPU) za pomocą komendy glVertex3f. Powodowało to ogromne "wąskie gardło".

Dzięki klasie Mesh, nasz silnik alokuje ciągły blok pamięci bezpośrednio w superszybkiej pamięci karty graficznej (VRAM). Używamy do tego komend glGenBuffers i glBufferData. CPU wysyła cały trójwymiarowy model raz (podczas ładowania poziomu), a podczas rysowania klatki nakazuje jedynie karcie graficznej: "narysuj bufor numer X".

Shadery (Vertex & Fragment)

Shadery to małe programy napisane w języku GLSL (OpenGL Shading Language), które działają bezpośrednio na procesorze karty graficznej (GPU). Zamiast używać domyślnych, przestarzałych ustawień oświetlenia, kontrolujemy dokładnie każdy piksel. W silniku wykorzystujemy dwa podstawowe: 1. Vertex Shader: Uruchamia się dla każdego wierzchołka. Tutaj przeliczamy matematykę macierzy – konwertujemy przestrzeń 3D ze świata gry, nakładamy macierz kamery i zniekształcenie perspektywy, aby uzyskać płaski obraz 2D. 2. Fragment Shader: (Zwany też Pixel Shaderem). Uruchamia się dla każdego piksela renderowanego na ekranie. Nasz kod liczy w nim cieniowanie przy pomocy iloczynu skalarnego światła kierunkowego i fizycznych wektorów normalnych obiektu.

Interpolacja (Lerp - Linear Interpolation)

Protokół sieciowy UDP z definicji nie gwarantuje stałego i płynnego dostarczania pakietów. Zamiast teleportować model przeciwnika na odebrane przed chwilą koordynaty, wyliczamy płynne przejście pomiędzy aktualną pozycją obiektu a pozycją zadeklarowaną w pakiecie. Służy do tego matematyczna funkcja mieszania z włączonym współczynnikiem czasu (tzw. Lerping).