2012-07-21 10 views
14

Come si crea una linea (eventualmente colorata) con ombreggiatori? Sto usando una pipeline programmabile e sono un principiante con openGL. Non riesco a trovare un esempio su come disegnare linee con shader. Suppongo di dover caricare un VAO (oggetto array di vertici) nello shader, ma poi? Quali funzioni dovrei usare e come?openGL: linee con ombreggiatori

+0

Sai come disegnare triangoli? In realtà non è diverso, basta specificare GL_LINES invece di GL_TRIANGLES in glDrawArrays/glDrawElements – Tim

+0

qualsiasi codice di esempio? –

risposta

9

Per prima cosa impostare utilizzando il programma shader. Quindi traccia le linee usando glDrawArrays (o Elementi se i tuoi dati sono indicizzati) con la modalità = GL_LINES o una delle altre modalità di disegno a tratteggio.

Ecco un esempio di codice per linee 2D con colori diversi a ciascuna estremità. Se la modalità shading è impostata su smooth, OpenGL interpola i colori lungo la linea.

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

Se avete bisogno di una maggiore flessibilità, è possibile disegnare linee utilizzando triangoli con la creazione di un rettangolo (4 punti) dai punti finali della linea. In 2D è possibile creare i 4 punti traducendo i punti finali usando la linea normale/perpendicolare (-y, x) della linea desiderata con. In 3D è necessario assicurarsi che i triangoli siano allineati alla telecamera come nei cartelloni pubblicitari.