PDA

Voir la version complète : Texturing + IndexBuffer


Kinju
23/11/2005, 10h18
Bonjour,

J'ai un cube, avec 8 vertex et 36 index. J'aimerai le texturer.
Je fais avec des index car j'ai vu que c'était plus performant d'envoyer à la carte graphique les vertex nécessaires et ensuite construire via les Index.

Seulement voilà, pour une face, un vertex aura une coordonnée de texture différente de celle qu'il aura pour une autre face, car il est réutilisé via les index.

Par exemple, le vertex en haut à gauche de la face avant du cube aura la coordonnée de texture (0.0f,0.0f) tandis que ce même vertex pour la face du dessus aura la coordonnée de texture (0.0f,1.0f).

Est-ce qu'il y a un truc ou bien dois-je abandonner les index?

Merci :)

A bientôt

grob1212
23/11/2005, 11h11
Il ne faut pas considérer un vertex comme simplement un point 3D, les propriétés qui l'accompagent telles que les coordonnées de texture, les paramètres de matériaux en font également partie intégrante.

Donc lorsque 2 vertices ne diffèrent que par leur coordonnées de texture, ils doivent être tout de même distincts dans le vertex buffer. Et cela, même si la transformation qu'ils vont subir aboutira aux mêmes coordonnées 2D clippées.

L'utilisation des indices buffers est dans la majeur partie des cas préférable.

Kinju
23/11/2005, 11h28
Merci pour cette réponse rapide :)

Ca va, je suis rassuré.

Là ça relève du casse-tête chinois... Comment faire une texture pour envelopper un cube, sachant que chaque face a son motif?

Je planche mais si vous avez des idées....

yoyonel
23/11/2005, 11h59
ben ... je vois pas le probleme en fait.

Tu as 6 faces pour ton cube, tu créé une texture que tu partionnes en 6 (a ce niveau c'est selon ta convenance, 3x2, 2x3 ... etc) et tu attribues les coordonnées de texture pour chacun des vertex composant les faces de ton cube.

Sinon ya toujours la possibilité d'utiliser une cube map ... c'est un peu fait pour ca maintenant que j'y pense. C'est une texture décomposée en 6 ou tu stockes ce que tu souhaites afficher sur chaque face.
Sous OpenGL c'est simple a faire (juste une init. de la texture un peu différente) sous directX ca doit pas etre bcp plus dur.

Bonne chance.

Kinju
23/11/2005, 12h07
Ha bah oui, j'avais oublié de préciser... J'ai un cube avec 8 vertices (la construction se fait avec des index).

Le problème c'est que je ne trouve pas le moyen de faire une texture où chaque vertices a une seule coordonnées de texture.

Si je fais une texture en 2*3 ou 3*2, un vertex aura une coordonnée de texture pour une face, mais une autre pour une autre face...

Ou est-ce que je peux trouver des infos sur le "cube map" ?

Merci :)

Loulou
23/11/2005, 12h30
Si je fais une texture en 2*3 ou 3*2, un vertex aura une coordonnée de texture pour une face, mais une autre pour une autre face...
Ben c'est justement ce qu'on t'explique depuis le début :
Donc lorsque 2 vertices ne diffèrent que par leur coordonnées de texture, ils doivent être tout de même distincts dans le vertex buffer

Kinju
23/11/2005, 12h47
Bah oui mais il dit aussi que c'est préférable d'utiliser les index...

Alors question performance, est-ce qu'il est préférable que j'abandonne les index, ou que je fasse plusieurs textures et lors du rendu je fait des SetTextures à gogo selon la fasse que je suis en train de dessiner?

Kinju
23/11/2005, 12h53
Ha bah nan, en plusieurs textures ça ira pas...

Ben merde, j'vais devoir abandonner les index :'(

Loulou
23/11/2005, 13h04
Les index buffers sont à utiliser le plus souvent possible (ce sera toujours plus performant, quelque soit le cas de figure), mais à partir du moment où tu dois dupliquer un vertex en mémoire alors index buffers ou pas ça ne changera rien, ce sera quoiqu'il arrive 2 vertices différents que tu auras à traiter.

grob1212
23/11/2005, 13h12
Pour bien comprendre ton problème, il faudrait déjà bien l'avoir cerné. Parce que pour effectuer le rendu d'un simple cube texturé, l'optimisation engendrée par un index buffer n'est pas réellement évidente.

Cependant, dans le contexte plus général des jeux vidéos, à savoir celui où l'on cherche à afficher des modèles composés d'un grand nombre de points 3D, l'apport des index buffers est indéniable.

Expliques-donc ton problème plus en profondeur.

Quant à la documentation sur les cube map :
- DirectX Documentation for C++
- Google

Kinju
23/11/2005, 13h22
Ben en fait je suis en train de faire un générateur de map.

Là pour le moment, je dois juste afficher une map plate (hauteur de tous les cubes constante). Donc imagine une map avec 20 cubes de côté...

Je l'ai fait, mais maintenant je passe au texturing, et donc bah là je suis en train de virer les index. Ca reste des formes simples, donc je peux les programmer de manière a pouvoir utiliser la généricité dans le nombres de cubes de chaque côté, la hauteur de chaque cube, largeur et longueur des cubes etc...

C'est pour faire des map très simples, pas des trucs avec des colines etc... (peut-être pour la suite).

Je compte faire un éditeur en outils annexe, exporter et importer les données, mais c'est pour plus tard ça.

Kinju
23/11/2005, 13h25
Enfin je regarde quand même là, j'vais faire avec des index, mais 24 vertices par cube...

grob1212
23/11/2005, 13h43
C'est pour faire des map très simples, pas des trucs avec des colines etc... (peut-être pour la suite).


Fais attention, en voulant considérer des cas particuliers dès le départ (les cubes), il se pourrait que tu compliques le problème par la suite lorsque tu passeras a des maps plus générales (collines, ...).

Kinju
23/11/2005, 13h47
Ouais... en plus c'est pas pour faire un éditeur de map...

Là je regarde pour des pentes etc.. ça va être chiant, et grosse perte de temps.

Est-ce qu'il y a des éditeur de map gratuit et simples sur le net? Ca génère quoi ces trucs là? des .X? Est-ce que une fois importé c'est comme une image? Est-ce que on peut connaître la normal d'un point précis?

C'est méga le brouillard mais j'pense que je vais passer par là plutôt.

En tout cas merci beaucoup