¿Existe una buena biblioteca de gráficos vectoriales C ++ multiplataforma? [cerrado]

9

Estoy haciendo un juego y quiero usar gráficos vectoriales. Empecé a volver a codificarlo con Cairo y el rendimiento es horrible. Entonces, estoy buscando una biblioteca diferente. Debe ser para C ++ y multiplataforma (por ejemplo, no Direct2D). Hay otra pregunta que alguien hizo antes como esta, pero no hubo respuestas adecuadas. Tiene que haber algo ...?

Zach Hinchy
fuente
La "pregunta formulada antes", ¿quiere decir gamedev.stackexchange.com/questions/4788/… ?
Tetrad
@Tetrad: la pregunta anterior excluye implícitamente la plataforma múltiple, ya que solicita explícitamente soluciones para Windows. Y las respuestas parecen apuntar solo a soluciones relacionadas con Windows.
Coyote
2
@Zach Hinchy: ¿Cuando dices multiplataforma te refieres a qué exactamente? Windows, Linux, OS X? ¿O incluye plataformas de mano iOS, Brew, Android?
Coyote
2
"Tiene que haber algo ...?" ¿Por qué? Los gráficos vectoriales, en general, no son algo que hacen las personas que necesitan más de 30 fps. ¿Su navegador web carga páginas a 30 fps? No. 10 fps es suficiente. Si usa gráficos vectoriales, es porque valora la calidad sobre el rendimiento. Y así, las bibliotecas de gráficos vectoriales valoran la calidad sobre el rendimiento. El Cairo en sí no es lento, pero es un renderizador de gráficos vectoriales de calidad. Y esa calidad significa que no es un obstáculo para el rendimiento.
Nicol Bolas
1
@iamcreasy: Hay una gran diferencia entre simplemente dibujar un quad más grande / más pequeño y una biblioteca de gráficos vectoriales. Los juegos se procesan con la GPU; No utilizan una biblioteca de gráficos vectoriales. No usan Cairo o AntiGrain ni nada de esas naturalezas.
Nicol Bolas

Respuestas:

21

Me temo que el tema es bastante complicado, parece que se han lanzado pocas soluciones multiplataforma, y ​​aún menos parecen haber sobrevivido por sí mismas. Estuve investigando el tema hace unos meses. Tenía una restricción, ya que necesitaba que el motor funcionara en iOS y Android. No encontré nada que realmente me convenía en ese momento.

Pero algunos consejos de lo que recuerdo: cada sistema GUI tiene algún tipo de API de dibujo. Por lo tanto, puede encontrar algo de interés dentro de los que son multiplataforma como QT .

Un equivalente de El Cairo sería AntiGrain. Es posible que desee comparar el rendimiento.

OpenFrameworks tiene soporte para gráficos vectoriales.

ImageMagick es una biblioteca muy grande que tiene soporte para gráficos vectoriales, y un lenguaje dedicado a ella .

En el nivel inferior encontrarás Libxmi y Libart del proyecto gnome.

No es una API de alto nivel, y no estoy seguro de cuáles son las probabilidades que le conviene, pero existe el OpenVG estándar . Existen múltiples puertos de OpenVG sobre los renderizadores de software OpenGL y OpenGL ES. Mesa 3D también parece tener una implementación de OpenVG. Pero para algunas plataformas solo habrá soluciones comerciales disponibles.

Hay muchas bibliotecas de nivel superior que integran API para gráficos vectoriales. Entre estos hay uno de código abierto llamado Clutter para el diseño de GUI y utilizado en el diseño de juegos serios hay una forma de escala (no de código abierto). Este motor de juego tiene algunas funciones para dibujar gráficos vectoriales: 2DEngine


EDITAR : el desorden utiliza cairo aparentemente.

Coyote
fuente
3

MonkVG es una emulación OpenVG multiplataforma sobre OpenGL ES 1.1 y 2.0. Ver: https://github.com/micahpearlman/MonkVG

Nota: Soy el autor original y el mantenedor de esta biblioteca. Tiene una licencia BSD muy liberal.

zerodog
fuente
Esta es una buena contribución a la pregunta, pero es apropiado tener en cuenta cuando está promocionando algo con lo que está afiliado (como su propia cuenta de github).
Seth Battin
-1

Terminé sin molestarme y solo con imágenes de alta resolución y escalado con OpenGL. Funciona lo suficientemente bien para mi situación.

Zach Hinchy
fuente
44
Usted preguntó acerca de una biblioteca pero aceptó una respuesta donde dice, simplemente elija al revés (ignorando el hecho de que es su respuesta). No es un buen juicio. (también ignorando el hecho de que tal vez le tomó a @Coyoto alrededor de 15 minutos escribir su respuesta). ¡Que tengas un buen día!
Quazi Irfan
1
Esto es aproximadamente 3 años demasiado tarde, pero se envió otra respuesta recientemente y recibí la notificación, así que finalmente he visto esto. Seguí adelante y no acepté el mío y acepté @ Coyote's. Lo siento, en ese entonces no entendía realmente StackOverflow. mejor tarde que nunca, espero, espero que ayude a las personas que vean la pregunta en el futuro.
Zach Hinchy