Я разрабатываю 2D-игровой движок, который в будущем будет поддерживать 3D. На данном этапе разработки я работаю над средством пакетной визуализации. Как некоторые из вас, возможно, знают, при объединении графики в пакеты единая поддержка цвета (RGBA), координаты текстуры, идентификатор текстуры (индекс текстуры) и матрица преобразования модели выходят из окна, но вместо этого передаются через буфер вершин. Прямо сейчас я реализовал передачу позиций модели, цвета, координат текстуры и идентификатора текстуры в буфер вершин. Мой формат буфера вершин прямо сейчас выглядит так:
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};
Я собираюсь интегрировать вычисление того, где объект должен находиться в мировом пространстве, используя матрицу преобразования. Это заставляет меня задать вопрос:
Должна ли матрица преобразования быть умножена на позиции вершин модели на процессоре или графическом процессоре?
Следует иметь в виду, что если я передам его в буфер вершин, мне придется загружать матрицу преобразования один раз на вершину (4 раза на спрайт), что мне кажется пустой тратой памяти. С другой стороны, умножение позиций вершин модели на матрицу преобразования на процессоре кажется более медленным по сравнению с возможностями параллелизма графического процессора.
Вот как будет выглядеть мой формат буфера вершин, если я вычислю преобразование на графическом процессоре:
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};
Этот вопрос в основном обусловлен теоретически. Таким образом, теоретический и технический ответ был бы весьма признателен. Но для справки, вот код.