Czy istnieje dobra wieloplatformowa biblioteka grafiki wektorowej C ++? [Zamknięte]

9

Tworzę grę i chcę korzystać z grafiki wektorowej. Zacząłem przekodowywać go za pomocą Kairu, a wydajność jest przerażająca. Więc szukam innej biblioteki. Musi być dla C ++ i dla wielu platform (np. Bez Direct2D). Jest takie pytanie, które ktoś wcześniej zadał, ale nie było odpowiednich odpowiedzi. Musi być coś ...?

Zach Hinchy
źródło
„Pytanie zadane wcześniej”, czy masz na myśli gamedev.stackexchange.com/questions/4788/... ?
Tetrad
@Tetrad: Poprzednie pytanie domyślnie wyklucza wiele platform, ponieważ wyraźnie domaga się rozwiązań dla systemu Windows. A odpowiedzi wydają się wskazywać tylko na rozwiązania związane z Windows.
Coyote
2
@Zach Hinchy: Kiedy mówisz na wiele platform, masz na myśli, co dokładnie? Windows, Linux, OS X? A może masz przenośne platformy iOS, Brew, Android?
Coyote
2
„Musi być coś…?” Dlaczego? Grafika wektorowa w ogóle nie jest czymś, co robią ludzie, którzy potrzebują 30 + fps. Czy Twoja przeglądarka ładuje strony przy 30 klatkach na sekundę? Nie. 10 fps to dużo. Jeśli używasz grafiki wektorowej, to dlatego, że cenisz jakość nad wydajnością. W ten sposób biblioteki grafiki wektorowej cenią jakość nad wydajnością. Sam Kair nie jest wolny, ale jest wysokiej jakości renderowaniem grafiki wektorowej. A ta jakość oznacza, że ​​nie ogranicza to wydajności.
Nicol Bolas,
1
@iamcreasy: Istnieje duża różnica między rysowaniem kwadratu większego / mniejszego a biblioteką grafiki wektorowej. Renderowanie gier z GPU; nie używają biblioteki grafiki wektorowej. Nie używają Kairu, AntiGrain ani niczego z tych natur.
Nicol Bolas,

Odpowiedzi:

21

Obawiam się, że temat jest dość trudny, wydaje się, że uruchomiono kilka rozwiązań wieloplatformowych, a jeszcze mniej przetrwało samodzielnie. Kilka miesięcy temu przyglądałem się temu tematowi. Miałem ograniczenie, ponieważ potrzebowałem silnika do pracy na iOS i Androidzie. W tym czasie nie znalazłem niczego, co by mi pasowało.

Ale kilka wskazówek z tego, co pamiętam: każdy system GUI ma jakąś formę rysowania API. Więc możesz znaleźć coś interesującego w tych, które są wieloplatformowe, takie jak QT .

Odpowiednikiem Cairo byłby AntiGrain. Możesz porównać wydajność.

OpenFrameworks obsługuje grafikę wektorową.

Bardzo dużą biblioteką, która ma wsparcie dla grafiki wektorowej - i dedykowany jej język - jest ImageMagick .

Niższy poziom znajdziesz Libxmi i Libart z projektu gnome.

Nie jest to interfejs API wysokiego poziomu - i nie jestem pewien, jakie są szanse, że ci się spodoba - ale istnieje standardowy OpenVG . Istnieje wiele portów OpenVG nad programami renderującymi OpenGL i OpenGL ES. Wydaje się, że Mesa 3D ma także implementację OpenVG. Ale w przypadku niektórych platform dostępne będą tylko rozwiązania komercyjne.

Istnieje wiele bibliotek wyższego poziomu, które integrują interfejsy API do grafiki wektorowej. Wśród nich znajduje się open source o nazwie Clutter do projektowania GUI, a przy poważnym projektowaniu gier istnieje format (Not Open Source). Ten silnik gry ma kilka funkcji do rysowania grafiki wektorowej: 2DEngine


EDYCJA : bałagan najwyraźniej używa Cairo.

Kojot
źródło
3

MonkVG to wieloplatformowa emulacja OpenVG oparta na OpenGL ES 1.1 i 2.0. Zobacz: https://github.com/micahpearlman/MonkVG

Uwaga: Jestem oryginalnym autorem i opiekunem tej biblioteki. Ma bardzo liberalną licencję BSD.

zerodog
źródło
Jest to świetny wkład w to pytanie, ale należy pamiętać, gdy promujesz coś, z czym jesteś powiązany (np. Własne konto github).
Seth Battin
-1

Skończyło się na tym, że nie zawracałem sobie głowy i po prostu korzystałem z obrazów w wysokiej rozdzielczości i skalowałem z OpenGL. Działa wystarczająco dobrze w mojej sytuacji.

Zach Hinchy
źródło
4
Zapytałeś o bibliotekę, ale zaakceptowałeś odpowiedź tam, gdzie jest napisane, po prostu odwróć (ignorując fakt, że twoja odpowiedź). To nie jest dobry osąd. (ignorując również fakt, że napisanie odpowiedzi może zająć @Coyoto około 15 minut). Miłego dnia!
Quazi Irfan,
1
to około 3 lata za późno, ale niedawno otrzymano inną odpowiedź i otrzymałem powiadomienie, więc w końcu to zobaczyłem. Poszedłem dalej i nie zaakceptowałem mojego i zaakceptowałem @ Coyote's. Przykro mi z tego powodu, tak naprawdę nie do końca rozumiałem StackOverflow. mam nadzieję, że lepiej późno niż wcale - mam nadzieję, że pomoże to ludziom, którzy zobaczą to pytanie w przyszłości.
Zach Hinchy