2017-07-18 4 views
1

Ich verwende GL_LINES, um viele Zeilen zu zeichnen. Aber einige der Linien sollten versteckt sein. Gibt es eine Möglichkeit, ein bestimmtes Liniensegment zu verwerfen?Wie verwerfen Sie eines der Liniensegmente?

Ich kann dies implementieren, indem Sie Zeilen in verschiedenen Puffern setzen. Die Leistung ist jedoch schlecht, wenn ich zu viele Puffer habe. Deshalb möchte ich sie jetzt in einen einzigen Puffer legen und den unnötigen löschen.

+1

Oh, ich denke, ich kann einen Indice-Puffer verwenden, um dies zu erreichen. Vielen Dank! –

+1

Sie sollten nicht GL_LINES in modernen GL, nur als eine Notiz verwenden. Um hilfreicher zu sein, verwenden Sie degenerierte Indizes: Eine Linie mit i0 == i1 wird nicht gezeichnet. Und nicht viel Buchhaltung benötigt! – starmole

+0

in oldstyle api gab es [glEdgeFlag] (https://www.khronos.org/registry/OpenGL-Refpages/gl2.1/xhtml/glEdgeFlag.xml) Ich denke, es sollte etwas Ähnliches in der neuen API zu – Spektre

Antwort

-1

Es gibt ein discard Schlüsselwort in GLSL. Sie können es in Fragment Stage verwenden, um Pixel zu verwerfen, die nicht gerendert werden sollen. Hier ist ein Beispiel, das alle roten Pixel verwirft:

sampled_color = texture(tex_sampler, tex_coords_FS_in);//Can be any way of obtaining pixels 
if(color.rgb == vec3(1.0, 0.0, 0.0)) 
{ 
    discard; 
} 
+1

Ich weiß nicht, das ist hilfreich. Wenn asker GL_LINES benutzt, bezweifle ich, dass es Shader gibt? – starmole

+0

@starmole Dies war die erste und einfachste Lösung, die mir in den Sinn kam, und ich habe 'GL_LINES' bereits zusammen mit Shadern verwendet, um die Position der Linien basierend auf einem Attribut zu ändern. Ich weiß nicht, was mit meiner Antwort los ist – Dynamitos

Verwandte Themen