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
risposta
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.
Sai come disegnare triangoli? In realtà non è diverso, basta specificare GL_LINES invece di GL_TRIANGLES in glDrawArrays/glDrawElements – Tim
qualsiasi codice di esempio? –