Pracuji na 2D herní engine, který bude podporovat 3D v budoucnu. V této současné fázi vývoje, pracuji na batch renderer. Jak někteří z vás možná víte, když dávkové zpracování grafiky spolu, jednotná podpora pro color (RGBA), texturovací souřadnice, texturu ID (textury index), a model transformační matice jít ven z okna, ale místo toho jsou předávány prostřednictvím vertex buffer. Teď jsem implementoval absolvování model je pozice, barva, texturovací souřadnice, texturu ID do vertex bufferu. Můj vertex buffer, formát vypadá takto:
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};
Chystám se integrovat výpočtu, kde je objekt by měl být ve světovém prostoru pomocí transformační matice. To mě vede k položit otázku:
Pokud by transformační matice vynásobí vrchol modelu pozice na CPU nebo GPU?
Něco mít na paměti, je, že když jsem se projít do vertex bufferu, musel bych nahrát transformační matice jednou na vrchol (4 krát za sprite), což se mi zdá jako ztráta paměti. Na druhou stranu, vynásobením model vertex pozic transformační matice na CPU se zdá, jako by to bylo pomalejší ve srovnání s GPU souběžnosti schopnosti.
To je, jak můj vertex buffer formátu by to vypadalo, kdybych výpočet transformace na 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};
Otázka je převážně teoreticky řízený. Takže, teoretickou a technickou odpověď by byla velmi ocenil. Ale pro porovnání, tady je kód.