Es gibt ein paar Möglichkeiten, 3D-Volumen Linien zu zeichnen. Die erste besteht darin, eine Vertex-Erweiterung im Shader durchzuführen. Dies tun die Links in den Kommentaren. Hier ist eine weitere, falls Sie mehr Material benötigen: http://codeflow.org/entries/2012/aug/05/webgl-rendering-of-solid-trails/.
Leider haben sie visuelle Artefakte, wenn das Liniensegment direkt auf Köpfe betrachtet wird. Schau dir die Demo hier an: http://codeflow.org/webgl/trails/www/. Drehen Sie die Szene herum und Sie werden feststellen, dass einige Liniensegmente, die direkt auf die Kamera gerichtet sind, sich schnell drehen. Es sieht viel schlechter mit einer weniger lauten Textur aus. Wenn dies für Sie in Ordnung ist, ist dies wahrscheinlich die bevorzugte Option.
Die zweite Option besteht darin, für jedes Liniensegment nur ein Kapsel-Netz dynamisch zu generieren. Es gibt nicht viel zu sagen, darüber hinaus ist dies eine einfache, etwas ineffiziente Methode.
Die dritte Option besteht darin, eine begrenzte Art von Raytracing im Shader durchzuführen. Berechnen Sie den Abstand zwischen dem Liniensegment und dem schattierten Fragment, und wir können daraus die geeignete Farbe bestimmen. Hier ist ein link dafür. Der Geometrieshader wird derzeit nicht im Webgl unterstützt, aber es gibt nichts, was Sie daran hindert, den Begrenzungslinienquader per Javascript zu erzeugen. Oh, und wenn Sie weiche Linien brauchen, brauchen Sie wahrscheinlich die blend_minmax
Erweiterung. Wahrscheinlich die am schwierigsten zu installierende Methode, kann aber im Vergleich zu den anderen beiden Methoden in jedem Winkel betrachtet und sehr individuell angepasst werden.
2D oder 3D? Wenn 2d würde ich für den einfachsten Ansatz gehen: Zeichnen Sie jede Zeile als ein Rechteck + 2 Halbkreise. Ansonsten gibt es Sachen wie https://mattdesl.svbtle.com/drawing-lines-ishard –
Da ist dieses http://labs.hyperandroid.com/efficient-webgl-stroking – gman
leider brauche ich es, 3d zu sein. Man kann sich vorstellen, dass das Bild Koordinaten wie (0, 0, 0), (1, 0, 0), (1, 0, 1.2), (1, 0.25, 1.2), (1, 0.25, 0.3) hat, beginnend bei der Scheitelpunkt auf der linken Seite. Danke für die Links. Ich werde es überprüfen. – Merc