Frage

Ich habe einig einfaches SVG Kunstwerk (Symbol und Glyphe Art von Dingen), die ich in einer OpenGL-Anwendung angezeigt werden soll (die Entwicklung in C ++ auf Debian, mit Qt).

Die offensichtliche Lösung ist, die ImageMagick Libs zu verwenden, um konvertieren die SVGs, um Bilder von Raster- und Textur sie auf einige geeignete Polygone Karte (oder verwenden sie nur gute alte glDrawPixels).

Allerdings frage ich mich, ob es etwas gibt, die die SVG direkt in eine Folge von OpenGL übersetzen werden Anrufe und machen es OpenGL Linien, Polygone und dergleichen. Wer weiß von nichts, was dies tun?

War es hilfreich?

Lösung

Qt kann dies tun.
QSvgRenderer kann eine SVG nehmen und es über einen QGLWidget
malen Sein möglicherweise müssen Sie mit dem paintEvent() abit herumzudaddeln wenn Sie etwas anderes auf dem QGLWidget andere als die SVG zeichnen möchten.

Andere Tipps

SVGL erscheint diese Adresse aber seit einigen Jahren ruhend. Dennoch könnten Sie in der Lage sein, dort einen Code von Wert zu finden.

Es sieht aus wie Inkscape einige interessante Exportmöglichkeiten hat, kann für Sie nützlich. Dazu gehören DXF, PovRay, EPS, PS (Postscript), XAML, Latex und OpenDocument- Zeichnung (ODG). Vielleicht gibt es einen Konverter für eine von denen, und Sie Inkscape als Vermittler nutzen könnten.

DXF insbesondere ist ein aussichtsreicher Kandidat, da es sich um eine gemeinsame 3D-Format ohnehin schon ist. assimp ist ein guter Kandidat für das Laden DXF.

Meine Antwort wird mich über die Anzeige von Vektorgrafiken Wtih OpenGL im Allgemeinen, weil alle Lösungen für dieses Problem insbesondere eher trivialen SVG unterstützen können, obwohl keine Unterstützung animierte SVGs (SMIL). Da sagte über Animation nichts war, gehe ich davon die Frage nur statische SVGs impliziert werden.

Seit 2011 wird der Stand der Technik ist Baby Mark Kilgard, NV_path_rendering , die derzeit nur ein Anbieter (Nvidia) Erweiterung wie Sie vielleicht schon aus dem Namen erraten haben könnten. Es gibt eine Menge von Materialien auf, dass:

Sie können natürlich Last SVGs und solche https://www.youtube.com/watch? v = bCrohG6PJQE . Sie unterstützen auch die Postscript-Syntax für Pfade. Sie können auch mit anderen Pfad OpenGL (3D) Sachen Rendering mischen, wie demoed an:

NV_path_rendering nun von Google Skia Bibliothek hinter den Kulissen verwendet, wenn verfügbar. (Nvidia dazu beigetragen, den Code Ende 2013 und 2014) Eines des kairo Devs (der auch einen Intel-Mitarbeiter ist) scheint es zu mögen http://lists.cairographics.org/archives/cairo/2013-March/024134.html , obwohl ich [noch] nicht bewusst schon konkrete Anstrengungen für kairo NV_path_rendering zu verwenden.

Ein Emporkömmling mit noch weniger (oder schlichtweg keine) Anbieter-Support oder akademischen glitz ist NanoVG , die derzeit entwickelt und gepflegt wird. ( https://github.com/memononen/nanovg ) die Anzahl der 2D-Bibliotheken über OpenGL Da haben kommen und ging im Laufe der Zeit, sie ist eine große Wette mit so etwas nicht von einem großen Anbieter unterstützt wird, in meiner bescheidenen Meinung nach nehmen.

Ich habe ein Vektor-Zeichenprogramm namens Omber , die eine gewisse Fähigkeit, SVG-Dateien zu importieren hat, und es kann Vektorzeichnungen zu einem „abgeflachten“ 3D-Modell in glTF 2.0-Format exportiert werden. Das glTF Format ist so ziemlich nur rohe OpenGL-Daten, so dass Sie es in und zeigen es mit minimalem Code lesen können. Ich schrieb ein wenig Pixi.js Plugin zum Anzeigen von Dateien glTF Vektor-Kunst enthalten, unter Verwendung von WebGL.

Blender haben auch Unterstützung von SVG-Dateien für den Import. Anschließend können Sie das Ergebnis in ein 3D-Dateiformat exportieren, aber der Blender Unterstützung für SVG ist mehr gedacht für einfache Kurven eher als komplexe Zeichnungen zu importieren.

Ich bin sicher, es gibt auch andere Werkzeuge, die auch Sachen wie dies tun kann. Ein Problem ist, dass SVG moderne Grafikhardware früher, so viele seiner Eigenschaften sind ein echten Schmerzen mit OpenGL zu implementieren, vor allem auf eine effiziente Art und Weise. Dinge wie Opazität auf Gruppen, Verläufe von unregelmäßigen Formen, rasterbasierte Filteroperationen etc. chaotisch, ich bin so nicht sicher, ob die eher esoterischen Funktionen von SVG werden von Programmen im Allgemeinen unterstützt, die Dinge zu 3D-Formaten umwandeln kann.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top