Вот код, который делает это (не проверено, но, по крайней мере, вы поняли идею):
void make_plane(int rows, int columns, float *vertices, int *indices) {
// Set up vertices
for (int r = 0; r < rows; ++r) {
for (int c = 0; c < columns; ++c) {
int index = r*columns + c;
vertices[3*index + 0] = (float) c;
vertices[3*index + 1] = (float) r;
vertices[3*index + 2] = 0.0f;
}
}
// Set up indices
int i = 0;
for (int r = 0; r < rows - 1; ++r) {
indices[i++] = r * columns;
for (int c = 0; c < columns; ++c) {
indices[i++] = r * columns + c;
indices[i++] = (r + 1) * columns + c;
}
indices[i++] = (r + 1) * columns + (columns - 1);
}
}
Первый цикл устанавливает массив вершин в стандартной прямоугольной сетке.Есть вершины R * C.
Второй цикл устанавливает индексы.Как правило, в сетке две вершины на квадрат.Каждая вершина приведет к рисованию нового треугольника (с двумя предыдущими вершинами), поэтому каждый квадрат рисуется с двумя треугольниками.
Первая и последняя вершины в начале и конце каждой строки дублируются.Это означает, что есть два треугольника нулевой области (вырожденные треугольники) между каждой строкой.Это позволяет нам нарисовать всю сетку в одну большую полосу треугольника.Эта техника называется сшивание.