2014-06-22 3 views
2

J'écris un jeu en C#, en utilisant le rendu de mode immédiat opengl. Plusieurs fois, les polygones transparents n'apparaissent pas correctement en raison d'apporter incorrectement triés. J'ai beaucoup cherché, mais je ne trouve pas de tutoriel sur la façon de faire rapidement le tri en profondeur. Ma tentative consiste à calculer la profondeur de chaque triangle transparent de la caméra en utilisant List.sort, mais c'était incroyablement lent (secondes par image, pas par image)Tri de profondeur de polygone dans C#

Existe-t-il un moyen standard de faire du tri en profondeur? Y a-t-il de bons tutoriels pour C# sur la façon de le faire? Existe-t-il un moyen rapide de le faire?

Répondre

1

rendu des commandes indépendantes de polygones translucides peut être l'un des effets les plus pénibles pour obtenir le droit d'une manière générique. C'est pourquoi les gens utilisent divers trucs avec des compromis différents entre la vitesse et la qualité. L'approche la plus simple consiste à simplement rendre votre géométrie en deux passes:

  1. Rendu toute la géométrie opaque.
  2. Désactiver la profondeur: écrit GL.DepthMask(false) et restitue votre géométrie translucide.

De cette façon, vos polygones translucides seront testées profondeur contre les polygones opaques, mais ne modifiera pas le tampon de profondeur (ils ne seront pas la profondeur testée par rapport aux autres polygones translucides.)

Ceci est Simple, rapide et évite la nécessité de trier les polygones. L'inconvénient est qu'il ne fonctionne que pour les effets translucides qui utilisent un mélange additif ou multiplicatif (les modes de mélange dit "commutatifs"). Pour les autres effets de fusion, vous devrez soit trier vos polygones translucides, soit utiliser une technique telle que le peeling en profondeur.

Références:

  1. http://www.openglsuperbible.com/2013/08/20/is-order-independent-transparency-really-necessary/
  2. https://gamedev.stackexchange.com/questions/43635/what-is-the-order-less-rendering-technique-that-allows-partial-transparency
  3. https://developer.nvidia.com/content/interactive-order-independent-transparency
  4. http://developer.download.nvidia.com/SDK/10/opengl/src/dual_depth_peeling/doc/DualDepthPeeling.pdf