2010-08-14 3 views
8

In meiner OpenGL-App wird es nicht möglich sein, eine Linie zu zeichnen, die größer als zehn Pixel ist. Gibt es eine Möglichkeit, mehr als zehn Pixel zu zeichnen?OpenGL Linienstärke

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

er .. was? Vielleicht sollten Sie ein Code-Snippet hinzufügen ... – AndreasT

Antwort

7

Sie könnten versuchen, ein Quad zu zeichnen. Machen Sie es so breit, wie Sie möchten, dass Ihre Linie lang und hoch wie die Linienbreite ist, die Sie brauchen, dann drehen Sie sie und positionieren Sie sie dort, wo die Linie liegen würde.

+0

Wie würde ich das tun? Wenn ich Ihnen vier Punkte gebe (x1, y1, x2, y2), möchte ich mit diesen vier Punkten eine Linie zeichnen, die größer als zehn Pixel ist. – Matt

+1

Sie würden glVertex2D() viermal aufrufen, mit den "Ecken" Ihrer "Linie". Es ist besonders einfach für vertikale/horizontale Linien, nicht zu schwer, um diagonal zu sein, wird aber ein wenig komplizierter bei Winkeln (nur approximieren, oder trig verwenden). Sie können vielleicht ein paar Tricks mit der Ansichtsmatrix machen, aber das Zeichnen des Quads ist wahrscheinlich einfacher (selbst wenn Sie trig verwenden). – ssube

3

Ah, jetzt, wo ich verstanden, was Sie meinen:

  1. durch ein Quadrat mit einem einem Unentschieden.
  2. calc die Länge und Ausrichtung der Linie der Länge in x
  3. stretch es
  4. zu startpos übersetzen und drehen

oder line_orientation:

  1. get Vektor der Zeile: v: (x2 - x1, y2 - y1)
  2. normalisieren v: n 3- erhalten orthogonal (normal) des Vektors: o (leicht in 2d)
  3. addieren und subtrahieren o vom Ende der Linie und Startpunkt, um 4 Eckpunkte zu erhalten
  4. zeichnen Sie ein Quad mit diesen Punkten.
3

Es macht Sinn, dass Sie nicht können. Aus der glLineWidth-Referenz:

Der Bereich der unterstützten Breiten und der Größenunterschied zwischen den unterstützten Breiten innerhalb des Bereichs können abgefragt werden, indem glGet mit den Argumenten GL_LINE_WIDTH_RANGE und GL_LINE_WIDTH_GRANULARITY aufgerufen wird.