-
Problème loader ASE
Bonjour :D !
Voilà je suis en train de faire un loader ASE, pour l'instant les tests sont plutôt concluants, mais je m'heurte à un problème super bizarre. Tout d'abord j'ai bien fait comme écrit dans le topic sur le sujet des normales, c'est à dire que mes vertices et mes normales y deviennent z et mes normales z deviennent -y.
Pour l'instant je ne charges que les vertices et les normales (je m'attaquerai aux textures quand tout marchera bien). Voilà le problème : sur un modèle assez complexe, le problème ne se voit pas, toutefois sur un modèle simple, un cube, il y a UNE face, et seulement une seule, qui a des comportements étranges, comme si la normale était mal spécifié, alors que j'ai regarder plusieurs fois, j'ia pris plusieurs modèles de cube, et à chaque fois le même problème ! Pour l'instant j'affiche mes objets avec les appels à glBegin/glEnd, mais je les mettrait en VBO dès que ça marchera bien.
Parceque c'est assez dur à expliquer, je vous donne le zip contenant l'exe et les fichiers.
http://membres.lycos.fr/hl2connection/ase.zip (clique droit enregistret sous)
C'est le vrai bazarre dans le zip, parceque ce projet me sert aussi de test pour le moteur physique Newton, donc désolé ^^. Le seul truc intéressant ici c'est les fichiers objloader.h, objloader.cpp et main.cpp.
Lancez le exe et regardez les faces supérieures, à un moment donné vous verrez un éclairage bizarre sur l'une des faces. Suivez cette face, et à chaque fois c'est que cette face qui a un éclairage bizarre ! C'est vraiment à n'y rien comprendre :/, puisque je les charge toutes de la même façon.
Encore plus étrange, si je remplace :
glColorMaterial (GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE);
glColor3f (0.75, 0.75, 0.75);
glColorMaterial (GL_FRONT_AND_BACK, GL_SPECULAR);
glColor3f (1.0f, 1.0f, 1.0f);
glColorMaterial (GL_FRONT_AND_BACK, GL_EMISSION);
glColor3f (0.0f, 0.0f, 0.0f);
glMaterialf (GL_FRONT, GL_SHININESS, 100);
par ça :
glColorMaterial (GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE);
glColor3f (0.75, 0.75, 0.75);
glColorMaterial (GL_FRONT_AND_BACK, GL_EMISSION);
glColor3f (0.0f, 0.0f, 0.0f);
j'ai plus de problème :|. Bref si quelqu'un pourrait analyser le code, je pige rien, j'ai écrit tout ce que fait exactement la fonction dessiner dans un fichier, tout correspond bien avec le fichier d'origine et tout, je pige rien :/.
-
Salut, ça faisait longtemps :)
T'as bien vérifié tes compteurs ? Genre tu t'arrêtes à i alors qu'il faut s'arrêter à i+1 par exemple ? Est-ce que tu as un déboggueur ? Vérifie l'état de tes variables.
Si ça ne fait ça que pour UNE face, je ne vois pas de problèmes OpenGL. Je me pencherai plutôt vers un problème d'algo.
Au pire, compare ton loader avec d'autres déjà fait pour pouvoir "cerner" ton erreur...
PS: tout ça n'est que pur supposition vu que ton ZIP m'apparait comme un fichier endommagé ou corrompu :)
++
-
Non, c'est bon ça marche maintenant ! J'ai écrit un simple petit cube avec glBegin et glEnd, à la main en spécifiant toutes les vertices à la main, et j'obtient le même résultat, donc ya pas de problème. Et puis là avec des modèles plus complexes, ya pas de problème. J'ai ajouté les textures, voilà le résultat que j'obtient :
http://membres.lycos.fr/hl2connection/eclairage.avi
Ca m'a l'air correct ^^ Après je pense que pour plus précis faudra un éclairage par pixel comme ceux montré sur le site !
EDIT : oops j'ai oublié d'appliquer les matérieux sur la vidéo ^^... Bon ça donne un peu près le même résultat, en plus éclatant.
-
À cause de 3ds, dans mon loader je charge pas les normales puisque je trouve que c'est chiant d'ajuster les normales selon le plan dans lequel l'objet à été dessiner dans 3ds, je les calcules moi même pour les avoir correctement et ca fonctionne bien depuis que je fait ca.
J'ai remarquer que si tu ne veut pas avoir à interchanger les valeurs y et z etc... pour les vertex et normal, il suffit de dessiner l'objet dans 3ds dans le même plan que tu vas les affichers dans opengl puis ca affiche dans le bon sens.
Pour moi le Y monte vers le haut dans opengl et j'ai dessiner mon objet dans 3ds avec le y qui pointe vers le haut. Comme c'est souvent le cas pour la plupart. Mais cela n'avais pas réglé mon problème avec les normales...j'avais une grosse partie de l'objet qui affichais bien mais j'avais toujours quelque face qui n'affichais pas bien alors j'ai décidé de les calculés moi-même et hop ca marcher du premier coups...toute mes faces affiche très bien.
Si tu essais de calculer tes normales au lieu de les chargé et que ca affiche bien, j'en resterais là.
De toute facon tant qu'à les prendres du fichier ou les calculer une fois dans le chargeur, ca revient au même sauf que tu es certain qu'il seront toujours correct pour n'importe quel objet peu importe l'inversion des coordonées qu'on est obliger de faire pour 3ds lorsqu'on est pas dans le même plan.
DestinyWar