2017-01-15 2 views
0

J'écris un globe virtuel en utilisant DirectX similaire à Google Earth. Jusqu'à présent, j'ai terminé la tessellation, et j'ai testé avec une texture enveloppée sur toute la sphère, ce qui a réussi. J'ai écrit les coordonnées de texture pour correspondre avec la latitude et la longitude (90lat, -180lon = 0,0 et -90lat, 180lon = 1,1).Mappage de textures à DirectX sphere?

Pour ce projet, j'ai besoin de superposer plusieurs mosaïques d'images sur la sphère. Par exemple, 8 images couvrant 90 degrés par 90 degrés. Ces tuiles peuvent être mises à jour dynamiquement (c'est-à-dire que des tuiles peuvent être ajoutées ou supprimées lorsque vous faites un panoramique). J'ai pensé à utiliser une vue de rendu et à dessiner les carreaux directement, mais je suis sûr qu'il y a un meilleur moyen.

Comment ferais-je cela? Existe-t-il un moyen de définir la texture pour couvrir uniquement un espace de coordonnées de texture spécifique? C'est à dire. de (0, 0) à (0,25, 0,5)?

Répondre

0

Il existe trois solutions simples (et peut-être beaucoup plus sophistiquées).

  1. Vous pouvez créer une géométrie qui correspond à la partie de la sphère couverte par une tuile et d'en tirer les ensuite, le réglage de la texture correcte avant chaque appel de tirage (si les tuiles sont disposées de manière simple, vous pouvez également générer cette géométrie en utilisant l'instanciation et un seul appel draw).
  2. Vous pouvez écrire un pixel shader qui évalue les coordonnées de texture et choisit la texture appropriée en utilisant les coordonnées de texture transformées.
  3. Rend toutes les textures à une grande texture et l'utilise pour restituer la sphère. Chaque fois qu'une tuile change, attachez la grosse texture en tant que cible de rendu et dessinez la nouvelle tuile par-dessus.