Так как тип координат вершины является целочисленным типом данных
std::vector<std::vector<int>> dupl;
, вы должны использовать glVertex2i()
.
Координаты вершины должны находиться в диапазоне нормализованного пространства устройства, которое составляет [-1, 1] для всех 3 компонентов (x, y, z).Чтобы «спроецировать» ваши координаты вершины на этот диапазон, вы должны использовать матрицу проекции.
Определить диапазон, который больше координат вершины, и установить матрицу ортографической проекции (см. glMatrixMode
) до glOrtho
, прежде чем рисовать геометрию.
double min_x = ..., min_y = ..., max_x = ..., max_y = ...;
glMatrixMode(GL_PROJECTION);
glOrtho(min_x, max_x, min_y, max_y, -1.0, 1.0);
while(!glfwWindowShouldClose(window) {
// [...]
}
Обратите внимание, что ортографическая проекция также должна учитывать соотношение сторон области просмотра.
Например, координаты вершины находятся в ярости [0, 400], а соотношение сторон окна просмотра составляет 16,0 / 9,0:
glOrtho(0.0, 400.0*16.0/9.0, 0.0, 400.0, -1.0, 1.0);
Если вы предпочитаете использовать координаты окна, а размер окна, например, 800x600:
glOrtho(0.0, 800.0, 0.0, 600.0, -1.0, 1.0);
glBegin
/ glEnd
должен содержать как минимум координаты вершины для одного Примитива .Примитив GL_QUADS
состоит из 4 координат вершин.
Но вы можете инкапсулировать столько квадов в одну последовательность, сколько захотите.Таким образом, for
-петл должен быть между glBegin
и glEnd
:
glBegin(GL_QUADS);
for(std::vector<int> &v : gol.alive)
{
glVertex2i(v[0], v[1]);
}
glEnd();