Je développe un jeu en 2D moteur 3D de soutien dans l'avenir. Dans cette phase de développement, je suis en train de travailler sur le lot de moteur de rendu. Comme certains d'entre vous le savent, lorsque le dosage, les graphismes, un soutien uniforme de couleur (RGBA), les coordonnées de texture, texture ID (indice de la texture), et le modèle de matrice de transformation de sortir de la fenêtre, mais au lieu de cela sont passés à travers le vertex buffer. Maintenant, j'ai mis en œuvre en passant du modèle de positions, de couleur, de texture, de coordonnées et de l'IDENTIFIANT de la texture pour le vertex buffer. Mon vertex buffer format ressemble à ceci maintenant:
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};
Je suis sur le point d'intégrer le calcul où l'objet doit être dans l'espace à l'aide d'une matrice de transformation. Cela m'amène à me poser la question:
Si la matrice de transformation, multiplié par le modèle de positions des sommets sur le CPU ou GPU?
Quelque chose à garder à l'esprit est que si je le passe à l'vertex buffer, je dois télécharger la matrice de transformation une fois par vertex (4 fois par sprite) qui me semble être un gaspillage de mémoire. D'autre part, en multipliant le modèle de positions des sommets par la matrice de transformation sur le CPU me semble qu'il serait plus lent comparativement avec le GPU de la simultanéité des capacités.
C'est ainsi que mon vertex buffer format pourrait ressembler si je fais le calcul de la transformation sur le 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};
La question est surtout théoriquement conduit. Donc, théorique et technique, la réponse devrait être très apprécié. Mais pour référence, voici le code.