Une bonne question J'essayais de le faire à un moment donné - je ne pouvais pas trouver une solution simple et prédéfinie. Mais laissez-moi vous indiquer certaines des ressources que j'ai trouvées en essayant de le mettre en œuvre moi-même:
Tout d'abord, il y a un article de GPU Gems 3: Rendering Vector Art sur le GPU (et le papier associé Loop-Blinn ).
Le plus difficile est que, si dessiner des courbes quadratiques est facile, les courbes cubiques (comme celles trouvées dans votre SVG typique) sont considérablement plus difficiles. L'article va dans les détails à ce sujet, mais vous devrez apporter votre chapeau de maths.
L'alternative au rendu des courbes cubiques consiste à convertir les courbes cubiques en courbes quadratiques. Également un problème non trivial.
Une fois que vous pouvez restituer des courbes vectorielles sur le GPU, il vous suffit d'analyser le fichier SVG de votre pipeline de contenu et de le transformer en un maillage que vous pouvez rendre. Au fait, analyser SVG est facile .
Une autre alternative, potentiellement plus simple, consiste à renoncer à toutes les courbes et à simplement trianguler une approximation linéaire de votre SVG.
Ces deux solutions nécessitent une triangulation - voici un triangulateur raisonnable adapté à XNA .
Comme alternative complètement différente, vous pouvez utiliser un "champ de distance" pour restituer les sprites avec des arêtes vives presque vectorielles.
Voici un article de Valve de SIGGRAPH 2007 expliquant comment procéder: Magnification améliorée avec test de l'alpha pour les textures vectorielles et les effets spéciaux (PDF)
La méthode de base ici est très facile à mettre en œuvre. La difficulté survient lorsque vous essayez de le faire supporter des angles vifs (quelque chose qui n’a été abordé que dans le document). Cette méthode a également des limitations assez sévères pour tout, sauf dessiner des formes simples. Il convient mieux au texte et aux décalques de l'interface utilisateur (comme Valve l'utilise pour).
Maintenant que j'ai dit tout cela - je dois dire que, selon mon expérience, tous les efforts déployés ici n'en valent pas la peine!
À moins que votre jeu ne soit basé principalement sur des effets de zoom vectoriel extrêmes , comme la très cool démo de Masagin , vous pouvez vous permettre de pré-restituer votre fichier SVG et d’utiliser simplement des techniques bitmap (plus faciles, mieux prises en charge, etc.).
(L'une des premières techniques qui vous viennent à l'esprit est la version haute résolution de vos sprites au format mip - mappage ( wiki ), qui vous donne l'indépendance de la résolution jusqu'à la taille maximale de votre sprite.)
Cet article de blog est probablement un bon point de départ pour ajouter le support de rendu SVG à votre pipeline de contenu XNA.