Una buona domanda Stavo sperimentando questo ad un certo punto: non riuscivo a trovare una soluzione semplice e pre-costruita. Ma lascia che ti indichi alcune delle risorse che ho trovato quando ho tentato di implementarlo da solo:
Prima di tutto c'è un articolo di GPU Gems 3: Rendering di grafica vettoriale sulla GPU (e il relativo documento Loop-Blinn ).
La parte più difficile è che, mentre disegnare curve quadratiche è facile, le curve cubiche (come quelle che si trovano nel tipico SVG) sono considerevolmente più dure. L'articolo approfondisce questo aspetto, ma dovrai portare il tuo cappello di matematica.
L'alternativa al rendering di curve cubiche è quella di convertire le curve cubiche in quadratiche. Anche un problema non banale.
Una volta che è possibile eseguire il rendering di curve vettoriali sulla GPU, si tratta semplicemente di analizzare SVG nella pipeline di contenuti e trasformarlo in una mesh che è possibile eseguire il rendering. A proposito, analizzare SVG è facile .
Un'altra alternativa, potenzialmente più semplice, è quella di rinunciare alle curve tutte insieme e triangolare semplicemente un'approssimazione lineare del tuo SVG.
Entrambe queste soluzioni richiedono triangolazione: ecco un triangolatore ragionevole adatto a XNA .
Come alternativa completamente diversa, è possibile utilizzare un "campo di distanza" per eseguire il rendering di sprite con spigoli vivi quasi simili a vettori.
Ecco un articolo di Valve di SIGGRAPH 2007 su come eseguire questa operazione: Miglioramento della prova alfa testata per trame vettoriali ed effetti speciali (PDF)
Il metodo di base qui è molto facile da implementare. La difficoltà si presenta quando si tenta di farlo supportare angoli acuti (qualcosa toccato solo sul foglio). Questo metodo ha anche alcune limitazioni piuttosto severe per tutto tranne che disegnare forme semplici. È più adatto al testo dell'interfaccia utente e alle decalcomanie (come Valve lo sta usando per).
Ora che ho detto tutto ciò, devo dire che, nella mia esperienza, tutto lo sforzo qui non ne vale la pena!
A meno che il tuo gameplay non sia basato principalmente su effetti di zoom vettoriale estremi come la fantastica demo di Masagin , puoi cavartela con il pre-rendering del tuo SVG e semplicemente usando tecniche bitmap (più facile, meglio supportate, ecc.).
(Una delle prime tecniche che mi viene in mente è il mipmapping ( wiki ) versioni ad alta risoluzione dei tuoi sprite, per darti l'indipendenza di risoluzione fino alla dimensione massima dello sprite.)
Questo post sul blog è probabilmente un buon punto di partenza per aggiungere il supporto per il rendering SVG alla tua pipeline di contenuti XNA.