2010-08-14 3 views
8

Nella mia app OpenGL, non mi consente di disegnare una linea superiore a dieci pixel di larghezza. C'è un modo per farlo disegnare più di dieci pixel?OpenGL Line Width

void OGL_Renderer::drawLine(int x, int y, int x2, int y2, int r, int g, int b, int a, int line_width) 
{ 
    glColor4ub(r, g, b, a); 

    glLineWidth((GLfloat)line_width); 
    glBegin(GL_LINES); 
    glVertex2i(x, y); 
    glVertex2i(x2, y2); 
    glEnd(); 
    glLineWidth(1.0f); 
} 
+0

ehm ... cosa? Forse dovresti aggiungere uno snippet di codice ... – AndreasT

risposta

7

Si potrebbe provare a disegnare un quad. Ingrandisci quanto vuoi che la tua linea sia lunga e alta come la larghezza della linea che ti serve, quindi ruota e posizionala dove dovrebbe andare la linea.

+0

Come dovrei farlo? Come se ti dessi quattro punti (x1, y1, x2, y2), voglio disegnare una linea più grande di dieci pixel con quei quattro punti. – Matt

+1

Chiamerai glVertex2D() quattro volte, con gli "angoli" della tua "linea". È particolarmente semplice per linee verticali/orizzontali, non troppo difficili da diagonali, ma diventa un po 'più complicata agli angoli (solo approssimativa, o usa trig). Potresti essere in grado di fare alcuni trucchi con la matrice di visualizzazione, ma disegnare il quad è probabilmente più semplice (anche se usi trig). – ssube

3

Ah, ora che ho capito quello che volevi dire:

  1. disegnare un quadrato uno per uno.
  2. CALC la lunghezza e orientamento della linea
  3. tratto alla lunghezza x
  4. traducono in startpos e ruotare per line_orientation

o:

  1. get vettore di linea: v: (x2 - x1, y2 - y1)
  2. normalizza v: n 3- get ortogonale (normale) del vettore: o (facile in 2d)
  3. aggiungere e sottrarre o dalla fine della linea e dal punto di partenza per ottenere 4 punti d'angolo
  4. disegnare un quad con questi punti.
3

Ha senso che non è possibile. Dal riferimento glLineWidth:

L'intervallo di larghezze supportate e la differenza di dimensioni tra le larghezze supportate all'interno dell'intervallo possono essere interrogate chiamando glGet con gli argomenti GL_LINE_WIDTH_RANGE e GL_LINE_WIDTH_GRANULARITY.