Есть ли хорошая кроссплатформенная библиотека векторной графики C ++? [закрыто]

9

Я делаю игру и хочу использовать векторную графику. Я начал перекодировать его, используя Cairo, и производительность ужасна. Итак, я ищу другую библиотеку. Он должен быть для C ++ и кроссплатформенным (например, без Direct2D). Есть еще один вопрос, который кто-то задавал ранее, но не было подходящих ответов. Там должно быть что-то ...?

Зак Хинчи
источник
« Заданный вопрос», вы имеете в виду gamedev.stackexchange.com/questions/4788/… ?
Тетрад
@Tetrad: предыдущий вопрос неявно исключает мультиплатформенность, поскольку он явно запрашивает решения для окон. И ответы, кажется, указывают только на решения, связанные с Windows.
Койот
2
@ Зак Хинчи: Когда вы говорите кроссплатформенный, вы имеете в виду, что именно? Windows, Linux, OS X? Или вы включаете карманные платформы iOS, Brew, Android?
Койот
2
"Должно быть что-то ...?" Почему? В общем, векторная графика - это не то, что делают люди, которым нужно более 30 кадров в секунду. Ваш веб-браузер загружает страницы со скоростью 30 кадров в секунду? 10fps достаточно. Если вы используете векторную графику, это потому, что вы цените качество, а не производительность. И, следовательно, библиотеки векторной графики ценят качество выше производительности. Сам Каир не медленный, но это качественный рендер векторной графики. И это качество означает, что оно не дает повода для производительности.
Николь Болас
1
@iamcreasy: Существует большая разница между простым рисованием квадрата больше / меньше и библиотекой векторной графики. Рендеринг игр с помощью графического процессора; они не используют библиотеку векторной графики. Они не используют Каир или AntiGrain или что-то из этого природы.
Никол Болас

Ответы:

21

Я боюсь, что тема довольно сложная, кажется, что появилось несколько мультиплатформенных решений, и еще меньше, похоже, выжили сами по себе. Я изучал эту тему несколько месяцев назад. У меня было ограничение, так как мне нужен был движок для iOS и Android. В то время не нашел ничего подходящего мне.

Но несколько указаний из того, что я помню: каждая система с графическим интерфейсом имеет ту или иную форму рисования API. Так что вы можете найти что-то интересное в кроссплатформенных, таких как QT .

Эквивалентом cairo будет AntiGrain. Вы можете сравнить производительность.

OpenFrameworks поддерживает векторную графику.

Очень большая библиотека, которая имеет некоторую поддержку векторной графики - и язык, посвященный ей - это ImageMagick .

На нижнем уровне вы найдете Libxmi и Libart из проекта gnome.

Не высокоуровневый API - и я не уверен, какие шансы вам это подойдут - но есть стандарт OpenVG . Существует несколько портов OpenVG поверх программных рендереров OpenGL и OpenGL ES. Mesa 3D также имеет реализацию OpenVG. Но для некоторых платформ будут доступны только коммерческие решения.

Есть несколько библиотек более высокого уровня, которые интегрируют API для векторной графики. Среди них есть открытый исходный код Clutter для дизайна графического интерфейса, который используется в серьезном игровом дизайне, есть масштабная форма (не с открытым исходным кодом). Этот игровой движок имеет несколько функций для рисования векторной графики: 2DEngine


РЕДАКТИРОВАТЬ : беспорядок использует Каир, по-видимому.

койот
источник
3

MonkVG - это кроссплатформенная эмуляция OpenVG поверх OpenGL ES 1.1 и 2.0. Смотрите: https://github.com/micahpearlman/MonkVG

Примечание. Я являюсь первоначальным автором и сопровождающим этой библиотеки. У него очень либеральная лицензия BSD.

zerodog
источник
Это хороший вклад в вопрос, но уместно заметить, когда вы продвигаете что-то, с чем вы связаны (например, ваш собственный аккаунт на github).
Сет Бэттин
-1

Я закончил тем, что не стал беспокоиться и просто начал работать с изображениями в высоком разрешении и масштабировать с помощью OpenGL. Это работает достаточно хорошо для моей ситуации.

Зак Хинчи
источник
4
Вы спросили о библиотеке, но приняли ответ там, где он говорит, просто выберите другой путь (игнорируя тот факт, что это ваш ответ). Это не хорошее суждение. (также игнорируя тот факт, что @Coyoto, возможно, потребовалось около 15 минут, чтобы написать свой ответ). Хорошего дня!
Quazi Irfan
1
это примерно на 3 года позже, но недавно был представлен другой ответ, и я получил уведомление, так что я наконец-то увидел это. Я пошел вперед и не принял мой и принял @ Койота. Я сожалею об этом, я тогда не совсем понимал StackOverflow. надеюсь, лучше поздно, чем никогда - надеюсь, это поможет людям, которые увидят этот вопрос в будущем.
Зак Хинчи