Je construis un petit moteur 3D pour un jeu sur lequel je travaille. J'ai mes bases triées: triangles texturés avec abattage de la face arrière. Cependant, le tri en profondeur s'avère être un problème difficile.Comment trier les triangles Z pour un moteur 3D?
Je calcule la face Z en faisant la moyenne des 3 points qui composent la face triangulaire. Les faces les plus longues chevauchent parfois les faces les plus petites, car elles ont une valeur Z plus élevée et se lèvent donc dans la liste d'affichage triée en profondeur.
Comment résoudre ce problème? Je suis sûr qu'il existe des techniques connues de tri en profondeur si je peux seulement obtenir de l'aide pratique pour les programmer. J'ai construire moi-même pipeline rendre donc j'avoir accès à toutes les données requises - triangles, les points, les textures, les coordonnées UV, etc. Cathédrale
rendu dans un programme 3D
cathédrale rendu dans mon moteur 3D
Y a-t-il un moyen de biaiser la routine de tri Z pour prendre en compte la zone triangle, sans avoir à diviser le tris? –
Incorrect. C'est exactement le problème que Z-buffering résout. Z-buffering est par pixel et est indépendant de la taille du polygone (il arrive à tout le long du pipeline pour le savoir). Le problème que vous décrivez s'applique uniquement au tri polygonal ou si vous affichez des polygones non opaques. Les questions de précision sont pertinentes pour le z-buffering et il y a une bonne introduction ici: http://www.sjbaker.org/steve/omniv/love_your_z_buffer.html – Justicle
Ce que dit Justicle. De plus, si vous avez besoin de z-tri (par exemple pour la transparence), une méthode de z-tri efficace consiste à utiliser une arborescence BSP. – Kos