2012-01-09 8 views
9

Estoy configurando un contexto OpenGL 3.2 Core en Mac OS X. Quiero poder dibujar algunos me gusta gruesos en negro en la pantalla. En la versión anterior de OpenGL, podría simplemente configurarOpenGL 3.2 Core Profile glLineWidth

glLineWidth(10.0f); 

y tendré una línea de 10 píxeles de ancho. Sin embargo, cuando puedo comprobar los intervalos de anchura de línea en 3,2 Core

GLint range[2]; 
glGetIntegerv(GL_ALIASED_LINE_WIDTH_RANGE, range); 
glGetIntegerv(GL_SMOOTH_LINE_WIDTH_RANGE, range); 

consigo los valores de 1 para con alias Líneas y 0-1 para las líneas lisas. ¿Cómo puedo hacer una línea de 10.0 píxeles de ancho en el espacio de la pantalla? ¿Hay una manera simple de dibujar esto que no sea hacer que cada segmento de línea sea un rectángulo?

Respuesta

7

Uso de OpenGL perfil 3.2 núcleo, llamando glLineWidth con un valor mayor que 1,0 dan un error INVALID_VALUE (llame glGetError para probarlo).

Seguramente puede obtener el resultado deseado determinando el cuadrante requerido para trazar la línea.

Creo que deberías poder generar quads desde puntos de línea: ¡oye, una línea más grande es un quad! Tal vez podrías usar techinques como this para obtener el resultado deseado.

La clave es: en lugar de depender de LineWidth, le da un quad de unidad como entrada (4 vértices usando una banda triangular), luego transforma los vértices entrantes dentro de un shader y le pasa uniformes apropiados.

Tal vez otro enfoque sería renderizar usando un sombreador de geometría: generar un quad desde un punto. Sin embargo, no estoy seguro acerca de este punto. No sé si un sombreador de geometría (solo si es factible, por supuesto) sería el mejor enfoque: el costo de dibujar una franja de línea con un solo quad sería la configuración uniforme del sombreador para cada línea que componga la franja.

+0

Parece que la mejor y única forma de hacerlo es dibujar el éter de geometría completo a través de la geometría inicial o un sombreador de geometría. – user1139069

1

Esto podría depender del tipo de proyección que configure. ¿Estás usando una matriz ortográfica o de proyección en perspectiva?

Creo que si no está utilizando la proyección ortográfica, la rasterización final de la primitiva estará sujeta a la distancia del objeto (matriz del modelo) desde la cámara (matriz de visualización).

Saludos

+0

Estoy usando proyección ortográfica. – user1139069