Question

J'utilise Direct3D pour afficher un certain nombre de sections en I utilisées dans la construction en acier. Il pourrait y avoir des centaines d'occurrences de ces sections I sur toute ma scène.

Je pourrais le faire de deux manières:

I-Sections

En utilisant la méthode A, j'ai moins de surfaces. Cependant, lorsque l’abattage de la face arrière est activé, les surfaces ne seront visibles que d’un côté. Si le retrait de la face arrière est désactivé, les bords (plaques horizontales) et la bande (plaque verticale) risquent d'être rendus dans le mauvais ordre.

La méthode B semble correcte (et je pourrais garder l’abattage de face arrière activé), mais dans mon modèle, l’épaisseur des plaques de la section en I n’a pas d’importance et j’aimerais éviter de créer une bande de triangle séparée pour chaque côté des assiettes.

Y a-t-il une meilleure solution? Existe-t-il un moyen de désactiver l’élimination de la face arrière pour certains appels uniquement de DrawIndexedPrimitives? Je voudrais aussi une réponse neutre à la plate-forme, s'il en existe une.

Était-ce utile?

La solution

Tout d’abord, l’abattage de la face arrière n’a rien à voir avec l’ordre de rendu des objets. En dehors de cela, j'opterais pour l'approche B sans aucune raison particulière, si ce n'est que son apparence sera meilleure. De plus, cet objet n'est probablement pas plus qu'une main pleine de triangles; avoir des centaines dans une scène ne devrait pas être un problème. Si tel est le cas, essayez d’instancier le matériel.

Autres conseils

Sous OpenGL, vous pouvez choisir d’écrire la face arrière pour chaque triangle dessiné:

glEnable(GL_CULL_FACE);
glCullFace(GL_FRONT);
// or
glCullFace(GL_BACK);

Je pense que quelque chose de similaire est également possible dans Direct3D

Si vos sections I ne changent pas souvent, chargez toutes les sections dans un seul grand tampon de sommets / index et dessinez-les en un seul appel. C'est la manière la plus performante de dessiner, et la carte graphique fera vite, même si vous y ajoutez un demi-million de triangles.

Oui, cela nécessite de dupliquer les données de sommet pour toutes les sections, mais c'est ainsi que D3D9 doit être utilisé.

Je choisirais A, car la distance à laquelle vous verriez le B serait un gaspillage de puissance de traitement pour dessiner tous ces triangles dégénérés.

De plus, je les déclencherais simplement sur un z-buffer et les laisserais tout régler.

Si le temps est trop lent, je commence à chercher à optimiser, mais même les cartes graphiques grand public peuvent dessiner des millions de polygones par seconde.

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