Zajmuję się tworzeniem grafiki 2D-silnik gry, który w przyszłości będzie obsługiwać 3D. Na tym etapie rozwoju pracuję nad środkiem packet wizualizacji. Jak niektórzy z was może wiedzą, podczas łączenia grafiki w pakiety jedna wsparcie kolory (RGBA), współrzędne tekstury, identyfikator tekstury (indeks tekstury) i macierz transformacji modelu wychodzą z okna, ale zamiast tego są przekazywane przez bufor wierzchołków. Teraz osiągnąłem transfer pozycji modelu, koloru, współrzędnych tekstury i identyfikatora tekstury do bufora wierzchołków. Mój rozmiar bufora wierzchołków teraz wygląda tak:
float* v0 = {x, y, r, g, b, a, u, v, textureID};
float* v1 = {x, y, r, g, b, a, u, v, textureID};
float* v2 = {x, y, r, g, b, a, u, v, textureID};
float* v3 = {x, y, r, g, b, a, u, v, textureID};
Mam zamiar zintegrować obliczenie tego, gdzie obiekt musi znajdować się w globalnej przestrzeni, wykorzystując macierz transformacji. To sprawia, że zadać pytanie:
Czy macierz przekształcenia być pomnożona, na pozycji wierzchołków modelu procesora lub procesorów kart graficznych?
Należy pamiętać, że jeśli przekażę go do bufora wierzchołków, będę musiał pobierać macierz transformacji raz na szczyt (4 razy na ikonkę), co wydaje mi się stratą pamięci. Z drugiej strony, mnożenie pozycji wierzchołków modelu w macierz transformacji na procesorze wydaje się wolniejszy w porównaniu z możliwościami równoległości procesora graficznego.
Oto, jak będzie wyglądać mój rozmiar bufora wierzchołków, jeśli вычислю konwersja na procesorze graficznym:
float* v0 = {x, y, r, g, b, a, u, v, textureID, m0, m1, m2, m3, m4, m5, m6, m7, m8, m9, m10, m11, m12, m13, m14, m15};
float* v1 = {x, y, r, g, b, a, u, v, textureID, m0, m1, m2, m3, m4, m5, m6, m7, m8, m9, m10, m11, m12, m13, m14, m15};
float* v2 = {x, y, r, g, b, a, u, v, textureID, m0, m1, m2, m3, m4, m5, m6, m7, m8, m9, m10, m11, m12, m13, m14, m15};
float* v3 = {x, y, r, g, b, a, u, v, textureID, m0, m1, m2, m3, m4, m5, m6, m7, m8, m9, m10, m11, m12, m13, m14, m15};
To pytanie głównie spowodowany teoretycznie. W ten sposób teoretyczny i techniczny odpowiedź był bym bardzo wdzięczny. Ale dla przypomnienia, oto kod.