OpenGL glDrawArrays с различными формами - PullRequest
0 голосов
/ 24 октября 2018

Для выполнения задания мне нужно написать программу, которая при первом щелчке нарисует точку, при втором щелчке нарисует линию, а при третьем щелчке - треугольник.Все это сделано в OpenGL.

Мне не нужен какой-либо код, но, поскольку я новичок во всем этом, мне трудно понять, как отправить это в GPU с помощью glDrawArrays (), так как функция принимаетmode.Я знаю, что хочу продолжать добавлять точки в массив - но так как режим постоянно меняется (GL_POINTS, GL_LINE_LOOP, GL_TRIANGLES), я не знаю, как его сохранить.

Любая и вся концептуальная помощь будет действительнооценили.

1 Ответ

0 голосов
/ 24 октября 2018

Вы сказали, что вам не нужен код, но, честно говоря, я мог бы попытаться дать пушистое объяснение множеством слов, или я мог бы просто объяснить это кратко в коде.

Допустим, у вас есть N вершин в вашем буфере вершин.Кажется, что вы хотите что-то вроде этого:

int num_extra_verts = N % 3;
int num_tri_verts = N - num_extra_verts;

// Draw triangles
if (num_tri_verts > 0)
    glDrawArrays(GL_TRIANGLES, 0, num_tri_verts);

// Draw point or line
if (num_extra_verts == 1)
    glDrawArrays(GL_POINTS, num_tri_verts, 1);
else if (num_extra_verts == 2)
    glDrawArrays(GL_LINES, num_tri_verts, 2);  // GL_LINE_LOOP not needed for single line

Если вы продолжаете добавлять новые точки в конец буфера вершин, это будет рисовать все треугольники, созданные до сих пор, плюс любую отдельную точку или линию дляпоследний, еще не весь треугольник.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...