2013-03-05 33 views
12

Sto pianificando di creare un'app per tablet. Vorrei chiedere qualche consiglio.Utilizzo di file SVG con libgdx

Ho immagini in formato SVG come this one.

Con SVG è semplice, basta modificare il parametro di riempimento con un colore diverso ma, come ho capito, non esiste un'elaborazione svg facile/stabile da utilizzare con libgdx. Voglio ancora usare i file svg per creare/salvare immagini per la mia app.

  • Quale percorso di elaborazione raccomanderesti?
  • C'è un modo semplice per convertire percorsi/forme svg per oggetti com.badlogic.gdx.math.bezier o poligono e quindi disegnarli sullo schermo/ottenere l'input dell'utente (toccare) all'interno di queste forme?
  • O dovrei usare oggetti/percorsi diversi?

Le forme possono essere raggruppate insieme, ad esempio voglio due finestre in una casa per cambiare colore in una volta.

+0

Non sono sicuro di ciò che si sta tentando di realizzare, ma ci sono molti modi per convertire i dati del percorso in altre strutture di dati. Ma in linea di principio tutto quello che posso dire è che la struttura dei dati del percorso svg è semplice da analizzare e facilmente comprensibile. dai un'occhiata qui: http://www.w3.org/TR/SVG/paths.html#PathData scrivere un parser per questo non è davvero difficile e con esso puoi inserire tutto in ogni framework ... – philipp

+0

Sono solo cercando di disegnare un'immagine e poi colorala toccando le forme interne. So come analizzare SVG ma non sono sicuro di quali oggetti libgdx dovrei usare come risultato per questo tipo di applicazione. grazie! – Robert

risposta

9

Il modo in cui LibGDX è scritto ti offre un modo di livello inferiore per eseguire questo tipo di rendering, ma non offre i modi migliori per eseguire il rendering di SVG. Dipende davvero se stai cercando qualcosa con prestazioni o semplicemente vuoi che disegni forme di base.

Per rendere semplicemente le forme è possibile utilizzare qualcosa come ShapeRenderer. Che ti offre un'interfaccia molto vicina al modo Java2D per disegnare le cose. Forse per disegnare velocemente alcune cose di base questo potrebbe essere utile.

Se si desidera eseguire una versione più robusta del rendering, è probabile che si desideri utilizzare Mesh e utilizzare gli shader per OpenGL ES. Puoi trovare esempi di questi nel e cercare online esempi/tutorial.

Se si desidera trasformare l'SVG in una texture, è necessario guardare Pixmap e quindi creare una Texture con esso e renderizzare con Spritebatch. Dovrai scrivere i pixel che vuoi colorare e simili con Pixmap. Tuttavia, farlo in questo modo genererà una trama non gestita (ad esempio, dovrai ricostruirla quando un utente torna all'app dopo aver premuto back o mettere il dispositivo in modalità di sospensione).

+1

Grazie. Non penso di aver bisogno di molta velocità - ma se capisco correttamente ShapeRenderer non permette di disegnare curve di Bezier? Inoltre è importante riempire facilmente queste forme con colori diversi, quindi le pixmap probabilmente non sono così utili? Ora ho solo bisogno di sapere se è possibile con le mesh :) – Robert

+0

La mesh è solo un'astrazione di alto livello dei VBO OpenGL. Se sei a tuo agio con i VBO, allora dovrebbe essere abbastanza semplice. La vera sfida è dover codificare gli algoritmi per generare triangoli per le forme/linee/ecc. – Jyro117

+0

Ok, quindi ho fatto alcuni test e sembra possibile importare mesh da Blender (importare SVG in blender, convertire in mesh, esportare in g3dt, passare all'app, creare stillModel dal file). Il problema è che non riesco a capire come visualizzarlo sullo schermo. A volte riempie tutta la vista, a volte è solo una piccola riga (cambio il suo colore per vederla). Se provo a utilizzare la videocamera, tutto scompare ... Quali sono le regole per posizionare la mesh importata sulla fotocamera? O dovrei in qualche modo farlo nel frullatore PRIMA di esportare? – Robert