2016-03-19 9 views
1

zeichne ich ein paar Zeilen in OpenGL (von C-Code) wie folgt aus:Wie man gestrichelte Linien vom "Tanzen" in OpenGl hält?

glLineStipple(6, 0xEEEE); 
glEnable(GL_LINE_STIPPLE); 
glBegin(GL_LINE_STRIP); 

glVertex2f(x, y); 
... 

Es funktioniert gut, wenn alles noch ist. Mein Problem ist jedoch, dass sobald ich hinein- oder hinauszoomen, die Linie schimmert. Ich meine, dass die Position der Bindestriche in der Zeile sich bewegt. Es sieht sehr schlampig aus.

Gibt es eine Möglichkeit zu verankern, wie die Linie im Modellraum gestrichelt ist? Ich denke, mein Problem ist, dass glLineStipple() auf die Anzahl der Pixel gezeichnet, aber ich möchte es auf die Länge im Modell Raum stattdessen betrachten.

+2

Verwenden Sie einen Shader. 'glLineStipple' ist alt und veraltet, und ein Shader gibt dir viel mehr Kontrolle über solche Dinge. –

+0

Ich stimme dem oben zu. Ich würde einen solchen Shader als Antwort schreiben, aber meine OpenGL-Testumgebung ist derzeit defekt. Ein Shader ist definitiv der richtige Weg. Im Allgemeinen wird empfohlen, feste Funktionen zu vermeiden. –

+0

Kann jemand eine Antwort mit einem Beispiel für die Verwendung eines Shaders posten? Ich habe noch nie einen Shader gemacht und alle Online-Tutorials benutzen sie mit Dreiecken, nicht mit Linien. – carey

Antwort

1

Ja. Texturieren Sie die Linie statt Stipple und Alpha-Blend. Ich würde den Mirror-Wrapping-Modus für die Textur bevorzugen, aber Wiederholung würde genauso gut auf dem Muster funktionieren. Verwenden Sie den Alpha-Test, um Coverage zu entfernen, die Artefakte verursacht, falls vorhanden. Setzen Sie Texturkoordinaten wie jedes Polygon auf die Linie.

Kein Shader erforderlich.