2012-07-21 3 views
14

Wie würde ich eine Linie (möglicherweise farbig) mit Shadern erstellen? Ich benutze programmierbare Pipeline und ich bin ein Anfänger mit OpenGL. Ich kann kein Beispiel finden, wie man Linien mit Shadern zeichnet. Ich denke, ich muss ein VAO (Vertices Array Objekt) in den Shader laden, aber was dann? Welche Funktionen sollte ich verwenden und wie?OpenGL: Linien mit Shadern

+0

Wissen Sie, wie man Dreiecke zeichnet? Es ist wirklich nicht anders, du spezifizierst GL_LINES statt GL_TRIANGLES zu glDrawArrays/glDrawElements – Tim

+0

irgendein Beispielcode? –

Antwort

9

Zuerst verwenden Sie das Shaderprogram. Zeichnen Sie dann Linien mit glDrawArrays (oder Elemente, wenn Ihre Daten indiziert sind) mit Modus = GL_LINES oder einer der anderen Linienzeichnungsmodi.

Hier ist ein Codebeispiel für 2D-Linien mit unterschiedlichen Farben an jedem Ende. Wenn der Schattierungsmodus auf "Glatt" eingestellt ist, interpoliert OpenGL die Farben entlang der Linie.

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

Wenn Sie mehr Flexibilität benötigen, können Sie Linien zeichnen Dreiecke durch die Schaffung eines Rechtecks ​​(4 Punkte) von den Linienendpunkte verwenden. In 2D können Sie die 4 Punkte erstellen, indem Sie die Endpunkte mit der Linie normal/lotrecht (-y, x) um die gewünschte Linie mit verschieben. In 3D müssen Sie sicherstellen, dass die Dreiecke wie beim Billboarding an der Kamera ausgerichtet sind.