2012-07-21 29 views
14

¿Cómo crearía una línea (posiblemente de color) con sombreadores? Estoy usando canal programable y soy un principiante con OpenGL. No puedo encontrar un ejemplo sobre cómo dibujar líneas con sombreadores ... Supongo que tengo que cargar un VAO (objeto de matriz de vértices) en el sombreador, pero ¿entonces qué? ¿Qué funciones debería usar y cómo?openGL: líneas con sombreadores

+0

¿Sabes cómo dibujar triángulos? Realmente no es diferente, solo especifica GL_LINES en lugar de GL_TRIANGLES para glDrawArrays/glDrawElements – Tim

+0

¿Algún código de ejemplo? –

Respuesta

9

Primero, configure use el programa shader. Luego dibuje líneas usando glDrawArrays (o Elementos si sus datos están indexados) con mode = GL_LINES o uno de los otros modos de dibujo de líneas.

Aquí hay un ejemplo de código para líneas 2D con diferentes colores en cada extremo. Si el modo de sombreado está configurado como uniforme, OpenGL interpolará los colores a lo largo de la línea.

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

Si necesita más flexibilidad, puede dibujar líneas con triángulos mediante la creación de un rectángulo (4 puntos) de los puntos finales de línea. En 2D puede crear los 4 puntos traduciendo los puntos finales usando la línea normal/perpendicular (-y, x) con la línea deseada. En 3D, debes asegurarte de que los triángulos estén alineados con la cámara, como en el caso de las carteleras.

Cuestiones relacionadas