2010-03-01 4 views
2

J'essaie de dessiner un cube texturé en utilisant seulement 8 sommets et un appel DrawIndexedPrimitives. Est-ce seulement possible?Direct3D: Dessine un cube texturé avec un seul appel DrawIndexedPrimitives. Possible?

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

Prenez la numérotation suivante comme exemple:

Cube with UV Values

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 vertex), je mets UV à (1, 1). Maintenant, les trois faces qui n'ont pas de sommet A ont chacune deux sommets qui ont une valeur UV de (1, 1). Je crois comprendre que cela ne devrait pas être le cas.

Quelle est alors la solution?

Répondre

4

Il n'est pas possible si un seul sommet a plusieurs coordonnées UV. Pour contourner ce problème, dupliquez la position du sommet et affectez à chaque copie une coordonnée UV unique. Cela augmentera le nombre de sommets à 24 pour un cube dans le pire des cas (quatre par côté).

C'est ce que tout le monde fait, indépendamment du fait qu'il utilise OpenGL ou DirectX. Pour un cube, cela peut ressembler à beaucoup de mémoire gaspillée, mais en pratique - avec des modèles du monde réel - la duplication de vertex n'est pas très élevée. Par la suite, vous pouvez dessiner le cube avec un seul appel à DrawIndexedprimitive.

Questions connexes