2012-01-09 12 views
9

Sto configurando un contesto di OpenGL 3.2 Core su Mac OS X. Desidero essere in grado di disegnare sullo schermo alcuni "Mi piace" neri spessi. Nella versione precedente di OpenGL, potrei semplicemente impostareOpenGL 3.2 Profilo principale glLineWidth

glLineWidth(10.0f); 

e otterrò una linea di 10 pixel di larghezza. Tuttavia quando controllo gli intervalli larghezza line 3.2 Nucleo

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

ottengo i valori di 1 per aliasing Lines e 0-1 per le linee lisce. Come posso creare una linea larga 10.0 nello spazio dello schermo? C'è un modo semplice per disegnare questo oltre a rendere ogni segmento di linea un rettangolo?

risposta

7

Usando OpenGL profilo 3.2 nucleo, chiamando glLineWidth con un valore maggiore di 1,0 danno un errore INVALID_VALUE (chiamata glGetError per provarlo).

Sicuramente è possibile ottenere il risultato desiderato determinando il quad richiesto per disegnare la linea.

Penso che dovresti essere in grado di generare quad da punti linea: hey, una linea più grande è un quad! Forse potresti usare tecniche come this per ottenere il risultato desiderato.

La chiave è: invece di fare affidamento su LineWidth, si assegna un'unità quad come input (4 vertici usando la striscia triangolare), quindi si trasformano i vertici in ingresso all'interno di uno shader passando ad esso uniformi appropriate.

Forse un altro approccio sarebbe il rendering utilizzando uno shader di geometria: generare un quad da un punto. Tuttavia, non sono sicuro di questo punto. Non so se uno shader di geometria (solo se fattibile, ovviamente) sarebbe l'approccio migliore: il costo di disegnare una striscia di linea usando un singolo quad sarebbe la configurazione uniforme dello shader per ogni linea che compone la striscia.

+0

Sembra che il migliore/l'unico modo per fare ciò sia di due disegnare l'etere completo della geometria attraverso la geometria iniziale o uno shader della geometria. – user1139069

1

Questo potrebbe dipendere dal tipo di proiezione impostato. Stai usando una matrice di proiezione ortogonale o prospettica?

Penso che se non si utilizza la proiezione ortogonale, la rasterizzazione finale della primitiva sarà soggetta alla distanza dell'oggetto (matrice del modello) dalla telecamera (matrice di visualizzazione).

Acclamazioni

+0

Uso la proiezione ortografica. – user1139069