PDA

Voir la version complète : Pb de jointure des Vertex Buffer


Rom1Mars
25/10/2005, 13h30
Bonjour à tous,

Je me présente rapido (j'avais deja eu un compte ici mais je m en rappelle plus...:00000020: ), je m'appelle Romain, j'habite à Marseille et j'ai 23 ans.

Je développe sur Directx 9.0 avec visual c++.
J'ai attaqué un tout nouveau projet 3D, et là j'en suis à la modélisation du terrain. Pour le modéliser j'utilise des Chunks de 64*64 carrés (soit 2 triangles)et donc chaque Chunk comprend un vertex buffer et index buffer. Mon problème se pose à la jointure de ces vertex buffers. Du point de vue raccord "position" ça me semble parfait le problème se situe dans la gestion de la lumiere.
2 screenshots sont mieux qu'un long discours :
http://www.drill.rr.nu/images/Screen4.jpg
Là tout est nickel c'est zoli comme tout, le problème se situe ici :
http://www.drill.rr.nu/images/screen5.jpg
Où on voit clairement la jointure.

Quelqu'un s'est il déja confronté au problème ? Quel peut etre la solution ?
Merci d'avance :00000023:

ShadowTzu
25/10/2005, 14h27
l'idéal serait de n'avoir qu'un seul VB, et plusieurs IB pour les Chunks. Et normalement il ne devrait pas y avoir ce problème.

Loulou
25/10/2005, 15h11
Le problème ne viendrait-il pas du calcul des normales pour les polygones se trouvant sur les bords d'un chunk ? Genre tu ne prendrais pas en compte ceux du chunk qui vient juste après.

A part ça, effectivement avoir un seul VB voire même un seul IB (tu stockes dans chaque chunk des fourchettes d'indices) serait préférable.

Rom1Mars
25/10/2005, 16h30
Effectivement le problème venait bien evidemment des normales. Pour le bord du Chunk je ne prenais pas en compte son voisin. Donc du coup maintenant je calcule indépendemment chaque Chunk et à la fin je moyennise les normales des bords des Chunks avec leurs voisins.

Concernant l'utilisation d'un seul VB/IB pour tout le terrain je sais pas si c'est une bonne solution. Je crois savoir que les lock/unlock ralentissent considérablement le prog car ils font des acces mem vive/mem video. Donc c'est pour cela que j'optais pour des Chunks indépendant où il me suffit juste de savoir lesquels affichés par rapport à la position de la caméra. (pour les grands terrains).
Ou alors j'ai pas bien compris ce que vous me proposez sur les VB/IB :00000023:

En tout cas merci pour vos réponses

ShadowTzu
25/10/2005, 16h46
justement, comme tu as plusieurs vb/ib cela résulte par plusieurs appel de: Device.SetStreamSource(0, VB, 0)
Device.Indices = IB
Et ça bouffe pas mal de temps.

alors qu'avec un seul VB il n'y a qu'un seul appel de SetStreamSource = gain de temps, enssuite ce sont les IB qui ce charge d'indiquez les vertices à rendre (je propose d'utiliser plusieur IB pour facilité l'évolution vers une gestion de different lod par chunk)

Rom1Mars
25/10/2005, 16h58
Si l'on prend le cas d'un gros terrain : 1 000 000 carrés.

Il vaut mieux avoir à charger un ENORME VertexBuffer et piocher dedans avec des IB plutot que d'avoir à charger de tous petits VB correspondant au Chunk visible par la caméra ?

ShadowTzu
25/10/2005, 20h54
A partir d'une certain taille (beaucoup) du vb je pense qu'il vaut mieu découpé dans d'autre vb, mais je ne suis pas sur. Sinon faire le rendu d'un terrain d'1 millions de vertices n'est pas trés conseillé on perd beaucoup de perf alors qu'on peu faire la même chose avec 500k en utilisant des algos d'optimisations de vertices. Et donc au final on se retrouvre avec un seul vb :p

Rom1Mars
25/10/2005, 22h33
Sinon faire le rendu d'un terrain d'1 millions de vertices n'est pas trés conseillé on perd beaucoup de perf

Justement l'utilisation de Chunk permet de faire de tres grandes etendues de terrain sans pertes de perf.