Question

Je suis en train de dessiner un cube texturé en utilisant seulement 8 sommets et un appel DrawIndexedPrimitives. Est-ce même possible?

Je rencontre des problèmes avec les coordonnées UV. Je trouve qu'il est impossible de trouver des valeurs UV appropriées qui travaillent pour toutes les faces du cube.

Prendre la numérotation suivante comme exemple:

Cube avec des valeurs UV

UV est réglé sur (0, 0) pour le sommet A. Pour tous les sommets diagonalement opposé à A (sur les trois faces de partage A comme un sommet), je suis en train UV (1, 1). Maintenant, les trois faces qui ne présentent pas un comme sommet finissent par avoir deux sommets chacun qui ont une valeur d'UV (1, 1). Je crois comprendre que cela ne devrait pas être le cas.

Quelle est alors la solution?

Était-ce utile?

La solution

Il est impossible si un seul sommet a plusieurs coordonnées UV.

Pour contourner ce problème en double la position de sommet et attribuer à chaque copie une coordonnée UV unique. Cela augmentera le nombre de sommets à 24 pour un cube dans le pire des cas (quatre de chaque côté).

Ce BTW est ce que tout le monde fait, peu importe s'il utilise OpenGL ou DirectX. Pour un cube cela peut ressembler à beaucoup de mémoire perdu, mais dans la pratique - avec des modèles du monde réel - la quantité de duplication de sommet est pas élevé

.

Ensuite, vous pouvez dessiner le cube avec un seul appel à DrawIndexedPrimitive.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top