Gibt es da draußen eine gute plattformübergreifende C ++ - Vektorgrafikbibliothek? [geschlossen]


9

Ich mache ein Spiel und möchte Vektorgrafiken verwenden. Ich habe angefangen, es mit Kairo neu zu codieren, und die Leistung ist schrecklich. Also suche ich eine andere Bibliothek. Es muss für C ++ und plattformübergreifend sein (z. B. kein Direct2D). Es gibt noch eine andere Frage, die jemand zuvor so gestellt hat, aber es gab keine passenden Antworten. Es muss etwas geben ...?


Mit "vorher gestellte Frage" meinen Sie gamedev.stackexchange.com/questions/4788/… ?
Tetrad

@ Tetrad: Die vorherige Frage schließt implizit mehrere Plattformen aus, da explizit Lösungen für Windows angefordert werden. Und die Antworten scheinen nur auf Windows-bezogene Lösungen zu verweisen.
Coyote

2
@Zach Hinchy: Wenn du plattformübergreifend sagst, meinst du was genau? Windows, Linux, OS X? Oder schließen Sie Handheld-Plattformen iOS, Brew, Android ein?
Coyote

2
"Es muss etwas geben ...?" Warum? Vektorgrafiken sind im Allgemeinen nichts, was Leute tun, die mehr als 30 fps benötigen. Lädt Ihr Webbrowser Seiten mit 30 fps? Nr. 10fps ist genug. Wenn Sie Vektorgrafiken verwenden, liegt dies daran, dass Sie Qualität vor Leistung schätzen . Vektorgrafikbibliotheken legen daher Wert auf Qualität vor Leistung. Kairo selbst ist nicht langsam, aber es ist ein hochwertiger Vektorgrafik-Renderer. Und diese Qualität bedeutet, dass die Leistung nicht beeinträchtigt wird.
Nicol Bolas

1
@iamcreasy: Es gibt einen großen Unterschied zwischen dem einfachen Zeichnen eines Quad größer / kleiner und einer Vektorgrafikbibliothek. Spiele werden mit der GPU gerendert; Sie verwenden keine Vektorgrafikbibliothek. Sie verwenden weder Kairo noch AntiGrain oder ähnliches.
Nicol Bolas

Antworten:


21

Ich befürchte, das Thema ist ziemlich knifflig, es scheinen nur wenige Multi-Plattform-Lösungen auf den Markt gekommen zu sein, und noch weniger scheinen allein überlebt zu haben. Ich habe mich vor einigen Monaten mit dem Thema befasst. Ich hatte eine Einschränkung, da ich die Engine brauchte, um auf iOS und Android zu laufen. Ich habe damals nichts gefunden, was mir wirklich passte.

Aber ein paar Hinweise von dem, woran ich mich erinnere: Jedes GUI-System hat irgendeine Form von Zeichen-API. Vielleicht finden Sie etwas Interessantes in solchen, die plattformübergreifend sind, wie QT .

Ein Äquivalent zu Kairo wäre AntiGrain. Vielleicht möchten Sie die Leistung vergleichen.

OpenFrameworks unterstützt Vektorgrafiken.

Eine sehr große Bibliothek mit Unterstützung für Vektorgrafiken - und einer dafür vorgesehenen Sprache - ist ImageMagick .

In der unteren Ebene finden Sie Libxmi und Libart aus dem Gnome-Projekt.

Keine High-Level-API - und ich bin mir nicht sicher, wie hoch die Wahrscheinlichkeit ist, dass sie zu Ihnen passt -, aber es gibt die Standard- OpenVG . Es gibt mehrere Ports von OpenVG über Software-OpenGL- und OpenGL ES-Renderer. Mesa 3D scheint auch eine OpenVG-Implementierung zu haben. Für einige Plattformen sind jedoch nur kommerzielle Lösungen verfügbar.

Es gibt viel höhere Bibliotheken, die APIs für Vektorgrafiken integrieren. Unter diesen gibt es eine Open-Source- Version namens Clutter für das GUI-Design, die im Serious-Game-Design verwendet wird. Es gibt eine Skalierungsform (Not Open Source). Diese Spiel-Engine hat einige Funktionen zum Zeichnen von Vektorgrafiken: 2DEngine


EDIT : Unordnung verwendet anscheinend Kairo.


3

MonkVG ist eine plattformübergreifende OpenVG-Emulation auf OpenGL ES 1.1 und 2.0. Siehe: https://github.com/micahpearlman/MonkVG

Hinweis: Ich bin der ursprüngliche Autor und Betreuer dieser Bibliothek. Es hat eine sehr liberale BSD-Lizenz.


Dies ist ein guter Beitrag zur Frage, aber es ist richtig zu beachten, wenn Sie für etwas werben, mit dem Sie verbunden sind (z. B. Ihr eigenes Github-Konto).
Seth Battin

-1

Am Ende habe ich mich nicht darum gekümmert und mich nur für hochauflösende Bilder und die Skalierung mit OpenGL entschieden. Es funktioniert gut genug für meine Situation.


4
Sie haben nach einer Bibliothek gefragt, aber eine Antwort akzeptiert, in der steht, wählen Sie einfach den umgekehrten Weg (ignorieren Sie die Tatsache, dass es Ihre Antwort ist). Es ist kein gutes Urteil. (Ignoriert auch die Tatsache, dass @Coyoto ungefähr 15 Minuten gebraucht hat, um seine Antwort zu schreiben). Einen schönen Tag noch!
Quazi Irfan

1
Dies ist ungefähr 3 Jahre zu spät, aber eine andere Antwort wurde kürzlich eingereicht und ich habe die Benachrichtigung erhalten, also habe ich dies endlich gesehen. Ich ging voran und akzeptierte meine nicht und akzeptierte @ Coyote's. Das tut mir leid, ich habe StackOverflow damals nicht wirklich verstanden. Ich hoffe, es ist besser spät als nie - hoffentlich hilft es Menschen, die die Frage in Zukunft sehen.
Zach Hinchy
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.