2010-08-14 28 views
8

En mi aplicación OpenGL, no me permitirá dibujar una línea de más de diez píxeles de ancho. ¿Hay alguna manera de hacer que dibuje más de diez píxeles?Ancho de línea 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 .. ¿qué? Tal vez deberías agregar un fragmento de código ... – AndreasT

Respuesta

7

Puede intentar dibujar un quad. Hazlo tan ancho como quieras para que tu línea sea larga y tan alta como el ancho de línea que necesites, luego gírala y colócala donde iría la línea.

+0

¿Cómo lo haría? Al igual que si le doy cuatro puntos (x1, y1, x2, y2), quiero dibujar una línea de más de diez píxeles con esos cuatro puntos. – Matt

+1

Llamarías a glVertex2D() cuatro veces, con las "esquinas" de tu "línea". Es especialmente simple para líneas verticales/horizontales, no es demasiado difícil para la diagonal, pero se torna un poco más complicado en ángulos (solo aproximados, o use trig). Es posible que pueda hacer algunos trucos con la matriz de vista, pero simplemente dibujar el cuadrángulo es probablemente más fácil (incluso si usa trig). – ssube

3

Ah, ahora que lo entendió lo que quería decir:

  1. dibujar un cuadrado, uno por uno.
  2. Calc la longitud y la orientación de la línea
  3. estiramiento a la longitud en x
  4. traducen a PosInicial y gire a line_orientation

o:

  1. get vector de la línea: v: (x2 - x1, y2 - y1)
  2. normalizar v: n 3- obtener ortogonal (normal) del vector: o (fácil en 2d)
  3. sumar y restar o desde el extremo de la línea y el punto de inicio para obtener 4 puntos de esquina
  4. dibuja un quad con estos puntos.
3

Tiene sentido que no pueda. Desde la referencia glLineWidth:

El rango de anchos admitidos y la diferencia de tamaño entre los anchos admitidos dentro del rango se pueden consultar llamando a glGet con los argumentos GL_LINE_WIDTH_RANGE y GL_LINE_WIDTH_GRANULARITY.

Cuestiones relacionadas