2010-08-14 11 views
8

W mojej aplikacji OpenGL nie pozwala mi narysować linii większej niż dziesięć pikseli szerokości. Czy istnieje sposób, aby narysować więcej niż dziesięć pikseli?Szerokość linii OpenGL

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 .. co? Może powinieneś dodać fragment kodu ... – AndreasT

Odpowiedz

7

Możesz spróbować rysować quad. Zrób tak szeroki, jak chcesz, aby twoja linia była długa i wysoka jak potrzebna szerokość linii, a następnie obróć ją i umieść w miejscu, w którym znajduje się linia.

+0

Jak to zrobić? Tak jakbym dał ci cztery punkty (x1, y1, x2, y2), chciałbym narysować linię większą niż dziesięć pikseli z tymi czterema punktami. – Matt

+1

Wywołałbyś glVertex2D() cztery razy, z "rogami" swojej "linii". Jest to szczególnie proste w przypadku linii pionowych/poziomych, niezbyt trudne do ukośnego, ale jest nieco trudniejsze pod kątem (tylko przybliżenie lub użycie trig). Możesz być w stanie zrobić kilka trików za pomocą macierzy widoku, ale samo rysowanie quada jest prawdopodobnie łatwiejsze (nawet jeśli używasz trig). – ssube

3

Ach, teraz, że rozumiem, co masz na myśli:

  1. narysować jeden po drugim kwadratowy.
  2. calc długość i orientację linii
  3. rozciągnąć do długości w x
  4. przekłada się pozycja_początkowa i obrócić do line_orientation

czyli

  1. get wektor linii: v: (x2 - x1, y2 - y1)
  2. znormalizować v: n 3- uzyskać ortogonalny (normalny) wektora: o (łatwy w 2d)
  3. dodaj i odejmij o od końca linii i punktu początkowego, aby otrzymać 4 punkty narożne
  4. narysuj kwadrat z tymi punktami.
3

Ma sens, że nie można. Z poziomu odniesienia glLineWidth:

Zakres obsługiwanych szerokości i różnicy wielkości między obsługiwanymi szerokościami w zakresie można sprawdzić, wywołując funkcję glGet z argumentami GL_LINE_WIDTH_RANGE i GL_LINE_WIDTH_GRANULARITY.