Sunt în curs de dezvoltare un motor de joc 2D care va sprijini 3D în viitor. În aceasta faza actuală de dezvoltare, am de lucru pe lot renderer. După cum unii dintre voi poate știți, când dozare grafică împreună, uniforme suport pentru culoare (RGBA), coordonate de textură, textura ID (textura index), și modelul matricea de transformare ieși pe fereastră, dar în schimb sunt trecut prin vertex buffer. Acum, am implementat trecerea model pozițiile, culoare, textura coordonate, iar textura ID-ul de la vertex buffer. Mi vertex buffer format pare ca acest lucru chiar acum:
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};
Sunt pe cale de a se integra calcul în cazul în care obiectul ar trebui să fie în spațiu lume, folosind un matricea de transformare. Acest lucru mă conduce la întrebarea:
Ar trebui să matricea de transformare să fie înmulțită cu modelul pozițiile nodurilor de pe CPU sau GPU?
Ceva de a păstra în minte este că, dacă am trece la vertex buffer, va trebui să încărcați matricea de transformare o dată pe vertex (de 4 ori pe sprite) ceea ce mi se pare o pierdere de memorie. Pe de altă parte, înmulțirea model pozițiile nodurilor de matricea de transformare de pe CPU se pare ca ar fi mai lentă comparativ cu GPU-ul e concurenta capacități.
Acesta este modul meu vertex buffer format ar arăta dacă am calcula transforma pe GPU:
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};
Întrebarea este în mare parte teoretic condus. Deci, teoretic și tehnic răspunsul ar fi mult mai apreciat. Dar pentru referință, aici este codul.