OpenGL: линии с шейдерами

Как создать строку (возможно, покрашенную) с помощью шейдеров? Я использую программируемый конвейер, и я начинаю с openGL. Я не могу найти пример, как рисовать линии с шейдерами. Предположим, мне нужно загрузить объект VAO (объект массива вершин) в шейдер, но что тогда? Какие функции следует использовать и как?

Ответы

Ответ 1

Сначала установите программу shaderprogram. Затем нарисуйте линии, используя glDrawArrays (или элементы, если ваши данные проиндексированы) с режимом = GL_LINES или одним из других режимов рисования линии.

Здесь приведен пример кода для двумерных линий с различным цветом на каждом конце. Если режим затенения настроен на плавное, OpenGL будет интерполировать цвета вдоль линии.

struct LineSegment_t
{
  float x1, y1;
  float r1,g1,b1,a1;
  float x2, y2;
  float r2,g2,b2,a2;
};

int num_verts = lines.size()*2;
glBindVertexArray( line_vao ); // setup for the layout of LineSegment_t
glBindBuffer(GL_ARRAY_BUFFER, LineBufferObject);
glBufferData(GL_ARRAY_BUFFER, sizeof(LineSegment_t)/2 * num_verts, &lines[0], GL_DYNAMIC_DRAW);
glDrawArrays(GL_LINES, 0, num_verts );

Если вам нужна большая гибкость, вы можете рисовать линии, используя треугольники, создавая прямоугольник (4 точки) от конечных точек линии. В 2D вы можете создать 4 точки, переведя конечные точки, используя линию normal/perpendicular (-y, x) по желаемой строке с. В 3D вам нужно убедиться, что треугольники выровнены по отношению к камере, как в афише.