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

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

1 ответов


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

вот пример кода для 2D-линий с разным цветом на каждом конце. Если режим затенения установлен на плавный, 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 вам нужно убедиться, что треугольники выровнены по камере, как в рекламном щите.