2012-07-21 18 views
14

Jak utworzyć linię (prawdopodobnie kolorową) za pomocą shaderów? Używam programowanego potoku i jestem początkującym użytkownikiem openGL. Nie mogę znaleźć przykładu, jak rysować linie za pomocą shaderów. Przypuszczam, że muszę załadować VAO (obiekt tablicy wierzchołków) do modułu cieniującego, ale co dalej? Jakie funkcje powinienem użyć i jak?openGL: linie z shaderami

+0

Czy wiesz, jak narysować trójkąty? To naprawdę nie inaczej, po prostu podajesz GL_LINES zamiast GL_TRIANGLES do glDrawArrays/glDrawElements – Tim

+0

dowolny przykładowy kod? –

Odpowiedz

9

Najpierw użyj programu cieniowania. Następnie narysuj linie przy użyciu glDrawArrays (lub elementów, jeśli dane są indeksowane) w trybie = GL_LINES lub w jednym z pozostałych trybów rysowania linii.

Oto przykład kodu dla linii 2D o różnych kolorach na każdym końcu. Jeśli tryb cieniowania jest ustawiony na gładki, OpenGL będzie interpolować kolory wzdłuż linii.

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); 

Jeśli potrzebujesz większej elastyczności, można rysować linie za pomocą trójkątów, tworząc prostokąt (4 punkty) z punktów końcowych linii. W 2D możesz utworzyć 4 punkty, tłumacząc punkty końcowe za pomocą linii normalnej/prostopadłej (-y, x) za pomocą pożądanej linii. W 3D musisz upewnić się, że trójkąty są wyrównane do kamery, tak jak w przypadku billboardowania.