Wie zeichnet man schnell eine gekrümmte Form?
von "schnell" gehe ich davon aus, dass man so viel wie möglich Hardware-Einrichtungen nutzen sollte
Mit "gekrümmt" meine ich Grenzen, die entweder durch quadratische oder kubische Bezier-Kurven definiert sind
Mit "Form" meine ich entweder einen "fetten" Strich (dh mehr als 1 Pixel breit) oder ein mit geraden, ungeraden / nicht null gefüllten "2D-gekrümmten Polygon", möglicherweise mit Löchern (dh Buchstaben "O").
Ich frage, weil die mir bekannten Optionen mehrere Nachteile haben:
Triangulieren der Form und Senden an OpenGL - erledigt die schwierigste Arbeit auf der CPU und verwendet möglicherweise zu viele / wenige Dreiecke (dh verschwenderisch / grob)
Texturatlas - muss die Textur bei jeder Änderung neu berechnen / hochladen (Form, Skalierung, Drehung, ...)
Vorzeichenbehaftetes Distanzfeld - In großen Maßstäben sehen die Details nicht hübsch aus oder müssen die Textur neu berechnen / hochladen
NV_path_rendering - könnte es sein, wenn es nicht nur auf Nvidias Karten funktioniert
OpenVG - könnte es sein, wenn es nicht nur auf Mobilgeräten funktioniert
?
* Es scheint mir, dass OpenVG nicht gerade vorwärts geht, um es milde auszudrücken. Weiß jemand etwas über seine Zukunftsaussichten? Lohnt es sich überhaupt, ein Auge auf die Gegenwart zu werfen?
** OpenGL 4+ bietet die Möglichkeit, Polygone im laufenden Betrieb zu tessellieren. Könnte es irgendwie verwendet werden, um das Netz aus der Option "Triangulieren" zu verfeinern, so dass die Formgrenze zumindest nicht "abgewinkelt" aussieht?
quelle
Antworten:
Sie können OpenGl 4.x-Tessellations-Shader verwenden, um Bezier-Kontrollpunkte in Polygone umzuwandeln.
Bei einer Google-Suche nach "Tessellation Shader Bezier" wurde diese Gliederung gefunden, die die Tessellation von Bezier-Oberflächen und -Kurven beschreibt:
http://web.engr.oregonstate.edu/~mjb/cs519/Handouts/tessellation.1pp.pdf
Dies verlagert die Bezier-Auswertung von der CPU auf die GPU und reduziert den Datenfluss über den Bus.
quelle
Mit Hardware kann man gekrümmt zeichnen. Es gibt eine Methode, die in beschrieben ist GPU Gems 3 , die beschreibt, wie dies gemacht wird. User @yuriks kommentiert dies tatsächlich. Ich habe tatsächlich schnell eine schmutzige Demo erstellt, die Sie sich ansehen können.
Bild 1 : HW-beschleunigte Kurvenformung (gezeichnet unter Verwendung eines Dreiecks) und Webgl-Quelle
quelle