Удалось сделать рисование четырехугольника по четырем вершинам. Объясню, почему это не так просто, как рисование треугольника:
OpenGL работает с треугольниками, поэтому для отрисовки четырехугольника надо разделить четырехугольник на два треугольника. При этом, если мы будем просто рисовать два треугольника, нам понадобится 6 вершин, по 3 на каждый из треугольников. И среди них будет две повторяющиеся. Мы же хотим рисовать четырехугольник на четырех вершинах. Для этого мы передаем в GPU только 4 вершины и заводим дополнительных буфер, в который сохраняем порядок отрисовки наших вершин.
Например:
вершины = {
0.5, 0.5, 0.0,
-0.5, 0.5, 0.0,
0.5, 0.5, 0.0,
-0.5, -0.5, 0.0,
}
номера вершин = {
0, 1, 2,
1, 2, 3,
}
Теперь будет рисоваться два треугольника - первый на вершинах номер 0, 1, 2, а второй на вершинах 1, 2, 3.
Ну и как всегда много времени у меня ушло на то, чтобы отладить это все, потому что этот прямоугольник довольно долго не хотел выводиться. Я пока не понял, когда можно удалять GL Buffers, так как данные из них должны в какой-то момент отправиляться в память GPU.
Сейчас сделал так, что они все сохраняются на время отрисовки, и при этом перед отрисовкой еще привязывается буфер
номера вершин
.
Сейчас потестил, буфер с вершинами можно удалить сразу после сохранения информации о нем в Vertex Arrays Object, а вот буфер с номерами вершин нужно в любом случае держать до отрисовки, потому что в этот момент его нужно привязать к GL_ELEMENT_ARRAY_BUFFER - без привязки он не отрисовывается.
#dev