Я изучал OpenGL и смог создать успешную 2d-систему рисования с использованием треугольных полосок. Я написал генератор частиц, чтобы проверить дозирование геометрии, и все работает хорошо, я могу отображать 30k + вершин со скоростью 60 кадров в секунду на iPhone 5. Я использую дегенеративные треугольники для соединения частиц и их рисования сразу. То, что я пытаюсь выполнить, - пакетное рендеринг без использования дегенеративных треугольников, поскольку это уменьшит количество данных, отправляемых на GPU, на 1/3 суммы, которая будет огромной.Batching OpenGL sprites
Я пытаюсь использовать glDrawElements с треугольниками, чтобы нарисовать 2 спрайтов с помощью следующего кода
//the vertices for the square (2d)
GLfloat square[] = {
50, 50, //bottom left
100, 50, //bottom right
50, 100, //top left
100, 100, //top right
150, 200, //bottom left
200, 150, //bottom right
150, 200, //top left
200, 200 //top right
};
//texture coords
GLfloat tex[] = {
0,0,
1,0,
0,1,
1,1,
0,0,
1,0,
0,1,
1,1
};
GLubyte indices[] =
{
0,2,3,
0,3,1,
0,2,3,
0,3,1
};
//actual drawing code
glBindBuffer(GL_ARRAY_BUFFER, 0);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0);
glVertexAttribPointer(ATTRIB_VERTEX, 2, GL_FLOAT, GL_FALSE, 0, square);
glVertexAttribPointer(ATTRIB_TEX, 2, GL_FLOAT, GL_FALSE, 0, tex);
glActiveTexture(GL_TEXTURE0);
glBindTexture(GL_TEXTURE_2D, image);
glDrawElements(GL_TRIANGLES, 12, GL_UNSIGNED_BYTE, indices);
Этот код рисует первое изображение без проблем, но второе изображение искажено. Я смотрю онлайн, но не смог понять, как правильно сделать эту работу.
Хорошо, я скорректировал квадратные координаты (lol) и изменил второй набор индексов на 4,6,7,4,7,5, и он отобразился правильно. Теперь мой вопрос в том, как я могу отображать большое количество элементов, если мне нужно продолжать увеличивать значения индексов? –