Pour illustrer simplement mon problème, j'essaye de rendre un maillage large mais simple à une texture à utiliser plus tard, mais étrangement, plus loin -les parties de ce mesh qui sont en dehors de la caméra sont affichées devant les parties les plus proches de la caméra, lorsqu'elles sont vues sous un angle spécifique. Malgré le fait indéniable que je fais au-delà de toute utilisation doute le test de profondeur:Le tri de profondeur OpenGL échoue sur un maillage unique, lors du rendu au framebuffer au lieu de l'écran
glEnable(GL_DEPTH_TEST);
glDepthFunc(GL_LESS);
À titre d'exemple, je suis en train de rendre une grille (sur le plan XZ) subdivisé Centré sur l'origine, avec une surface lisse « colline » au milieu de la grille.
Lors du rendu à l'écran aucune erreur se produit et le maillage ressemble à ceci (rendu par projection orthographiques, et avec la couleur de gris représentant la profondeur, aucune erreur ne sera en outre se produire même si le maillage est vue de tout côté):
rendu à l'écran est bien sûr fait en vous assurant que le framebuffer est réglé sur 0 (glBindFramebuffer(GL_FRAMEBUFFER, 0);
), mais je dois rendre cette scène à un autre framebuffer qui n'est pas mon écran, afin de pouvoir utiliser ce rendu comme une texture.
J'ai donc mis en place un autre framebuffer, et une texture de sortie, et maintenant je redirige cette scène vers le framebuffer (avec absolument rien, excepté le framebuffer et la taille de viewport). Dans le but de démontrer l'erreur que j'expérimente, je rends ensuite cette texture rendue sur un plan qui est ensuite affiché sur l'écran. Lorsque le maillage est pivoté vu de l'axe x positif, et tourné autour de l'axe y, centré sur son origine entre -0,5 π rad et 0,5 π rad, la texture rendue est exactement identique au résultat lors du rendu au écran, comme on le voit sur l'image ci-dessus.
Cependant, lorsque la rotation autour de l'axe y est supérieure à 0,5 π rad ou inférieure à -0,5 π rad, la pente la plus proche de la caméra est rendue derrière le plan plus éloigné de la caméra (le fait que la colline est plus proche de la caméra peut être prouvé en regardant la couleur, ce qui représente debth):
(oups obtenu le titre erroné sur la fenêtre, ignorer)
Dans le régions frontalières avec une rotation autour de l'axe y de près de 0,5 π rad ou -0,5 π rad la scène ressemble à ceci.
(oups a obtenu le titre erroné sur la fenêtre à nouveau, ignorer à nouveau)
Pour récapituler. Cette erreur avec le tri en profondeur ne se produit que lors du rendu d'une texture à l'aide d'un framebuffer, et uniquement lorsque l'objet est vu sous un angle spécifique. Lorsque l'objet est rendu directement à l'écran, aucune erreur ne se produit. Ma question est la suivante: pourquoi cela arrive-t-il, et comment (le cas échéant) puis-je éviter de l'éviter?
Cette première image ... ne ressemble pas à une projection orthographique. Cela ressemble à une projection de perspective pour moi. –