problème de z-buffer [RéSOLU] [OpenGL] [SDL2] - C - Programmation
Marsh Posté le 29-04-2014 à 13:25:17
j'ai pas vu le résultat, et ce que tu décris est un peu léger.
A tout hasard : es-tu sur de ne pas voir le backface des triangles, pour avoir cette impression ? Parce que pour l'instant, j'ai du mal à imaginer comment tu aurais un souci de z-buffer.
Marsh Posté le 29-04-2014 à 13:35:13
La pyramide tourne mais le triangle orange reste toujours au premier plan, le bleu au second plan, le vert au troisième et le rouge au fond.
Rouge et vert devraient être au premier plan :
Vert et bleu seulement visible, or le orange, qui est derrière, recouvre le bleu.
Qu'entends tu par backface ?
Marsh Posté le 29-04-2014 à 13:53:04
non, effectivement, tu as raison, c'est un problème de z-buffer, il semblerait Et effectivement, si la dernière face affichée reste par-dessus toutes les autres, ca semble vouloir dire que ton z-buffer n'est pas actif du tout, même.
J'aurais tendance à me demander si le SDL_CreateWindow ne devrait pas être fait avant d'initialiser tes features OpenGL. J'imagine que tu t'es appuyé sur un tutoriel, non ?
Le point que tu soulèves (le Z au même niveau pour toutes les faces) pourrait arriver si ton front clip plane et back clip plane sont mal définis. J'oserais espérer que les valeurs par défaut ne te causent pas de souci, mais tu peux toujours regarder de ce côté là aussi. La précision de ton Z-Buffer est définie certes par le nombre de bits que tu as, mais plus tu as une longue distance à couvrir avec tes 24 bits, moins ton z-buffer est précis localement, ca pourrait expliquer que tous tes triangles puissent se trouver tous sur une même valeur de Z.
Juste pour info :
Ma théorie sur les backface, c'était que tu afficherais peut-être le mauvais côté de ta pyramide, mais visiblement, tu veux voir les deux côtés dans ton cas.
Le côté visible quand tu n'affiches que l'un est déterminé par la normale à chaque triangle qui, si elle n'est pas donnée, est calculée par OpenGL automatiquement. La normale va être dans un sens ou dans l'autre suivant l'ordre des points que tu donnes. C'est une erreur assez courante de ne pas donner ses points dans le bon ordre quand on ne donne pas la normale à la face.
Edit : non, effectivement, la doc SDL indique clairement l'ordre d'initialisation que tu fais ... Tu peux peut-être tester les codes de retour de tes appels à SDL_GL_SetAttribute pour vérifier que tout se passe bien ? Tu dois aussi sans doute pouvoir regarder ce qui est dans ton contexte openGL pour voir si tout a bien été appliqué ?
Marsh Posté le 29-04-2014 à 14:06:57
theshockwave a écrit : |
Presque, je suis les tutoriels de Nehe en adaptant à SDL2.
C'était presque ça, le SDL_GLContext devait être créé avant l'initialisation openGL, tu m'as mis sur la voie. Merci beaucoup
Marsh Posté le 29-04-2014 à 12:11:11
Bonjour à vous.
Je m'amuse à apprendre à programmer en opengl (et SDL2) et je bloque un peu.
D'abord, du code:
Ça compile sur tous projets incluant SDL2.
Et comme vous voyez, la pyramide est bizarre.
J'ai l'impression que les triangles restent à leur plan d'origine, un problème de Z-BUFFER en gros.
Comment régler ça ?
Merci
Message édité par Tangrim le 29-04-2014 à 14:07:38
---------------
Des Bisous et des nounours ! | Internet 2025 | Dungeon-Generator