2010-08-14 4 views
8

Dans mon application OpenGL, il ne me laisse pas tracer une ligne supérieure à dix pixels de large. Y at-il un moyen de faire dessiner plus de dix pixels?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

euh ... quoi? Peut-être que vous devriez ajouter un extrait de code ... – AndreasT

Répondre

7

Vous pourriez essayer de dessiner un quad. Rendez-le aussi large que vous voulez que votre ligne soit longue et grande comme la largeur de ligne dont vous avez besoin, puis faites-la pivoter et placez-la à l'endroit où la ligne irait.

+0

Comment ferais-je cela? Comme si je vous donnais quatre points (x1, y1, x2, y2), je veux dessiner une ligne de plus de dix pixels avec ces quatre points. – Matt

+1

Vous appellerez glVertex2D() quatre fois, avec les "coins" de votre "ligne". Il est particulièrement simple pour les lignes verticales/horizontales, pas trop difficile à diagonaliser, mais devient un peu plus compliqué pour les angles (juste approximatif, ou utiliser trig). Vous pourriez être en mesure de faire quelques trucs avec la matrice de vue, mais dessiner le quad est probablement plus facile (même si vous utilisez trig). – ssube

3

Ah, maintenant que je compris ce que vous vouliez dire:

  1. dessiner un par un carré.
  2. calc la longueur et de l'orientation de la ligne
  3. tronçon à la longueur de x
  4. Traduire en startpos et tourner à line_orientation

ou:

  1. get vecteur ligne: v: (x2 - x1, y2 - y1)
  2. normaliser v: n 3- obtenir orthogonale (normale) du vecteur: o (facile en 2d)
  3. ajouter et soustraire o de la fin de la ligne et le point de départ pour obtenir 4 points d'angle
  4. dessiner un quad avec ces points.
3

Il est logique que vous ne pouvez pas. À partir de la référence glLineWidth:

La plage des largeurs prises en charge et la différence de taille entre les largeurs prises en charge dans la plage peuvent être interrogées en appelant glGet avec les arguments GL_LINE_WIDTH_RANGE et GL_LINE_WIDTH_GRANULARITY.