2010-12-15 3 views
0

Je crée une géométrie à base de vertex plat dans le but de créer un terrain 2D pour un jeu de type Scroller latéral 2D. Jusqu'à présent, je peux créer le tampon de vertex et dessiner n'importe quel triangle à l'écran que je veux. Cependant, j'ai un problème avec la texturation. Comment puis-je texturer les triangles à l'aide de carreaux (si possible, même si c'est possible). J'utilise la classe BasicEffect.Mise en mosaïque d'une texture sur un tampon de vertex? (Windows Phone 7/XNA)

Quel serait un bon algorithme pour configurer les données UV à travers tous les sommets de telle sorte que la texture les recouvrira de façon transparente n nombre de fois? Mon idée actuelle est d'obtenir les sommets les plus à gauche et les plus à droite (ainsi que le plus haut, le plus bas) dérivant les dimensions de la géométrie entière basée sur cela, puis passant par chaque triangle et fixant l'UV de ses sommets (basé sur les triangles largeur/hauteur) à une valeur telle qu'il utilisera un peu de la texture de sorte qu'elle se fondra dans la suivante (ie un sommet UV serait 0.1, 0.3 et le prochain serait 0.2, 0.4).

Cela semble un peu compliqué et a un énorme retrait, la taille de la tuile doit être plus grande que la taille du plus grand visage de triangle, mais c'est la seule façon dont je peux penser à le faire. J'ai essayé la recherche d'une solution ou au moins quelqu'un d'autre qui a fait la même chose que moi mais qui n'a rien trouvé.

Répondre

3

Oui, vous devrez trouver un algorithme pour configurer correctement vos coordonnées tex ... c'est malheureusement une fonction de ce à quoi ressemblent vos textures et votre géométrie, donc je ne sais pas si nous serons capables de Aidez-moi.

En ce qui concerne le bit technique, vous devriez pouvoir régler le TextureAddressMode à Wrap et le GPU se chargera d'échantillonner la texture en conséquence pour la positionner en fonction de l'UV.

graphics.GraphicsDevice.SamplerStates[0].AddressU = TextureAddressMode.Wrap; 
graphics.GraphicsDevice.SamplerStates[0].AddressV = TextureAddressMode.Wrap; 
Questions connexes