我正在开发一个2D游戏引擎,将支持3D的未来。 在当前这个发展阶段,我正在批呈现。 为一些你可能知道,在分批处理的图形合在一起,统一支持的颜色(RGBA)、纹理坐标纹理ID(纹理指数),以及模型转换矩阵出去窗口,而是通过顶点缓冲区。 现在,我已经实施了通过模型的职位的、颜色、质地坐标,并纹理ID到顶点缓冲区。 我的顶点缓冲区的格式是这样现在:
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};
我要把计算,其目的应该是在世界空间,使用转换矩阵。 这导致我提出这样的问题:
应该转换矩阵可乘以在模型的顶点位置上的处理器或GPU?
东西要记住的是,如果我通过它的顶点缓冲,我已经上传的转换矩阵一旦每顶点(4次每sprite)这对我来说似乎是一个废物的存储器。 另一方面,乘以型的顶点位置的转换矩阵的CPU似乎喜欢它会慢与GPU的并发能力。
这是我的顶点缓冲区的格式会是什么样子,如果我的计算改变的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};
问题主要是理论上的驱动。 因此,理论和技术的答案,将不胜感激。 但作为参考,这里的代码。