voilà, j'ai un bug que je n'arrive pas à résoudre..
j'ai écrit une procédure qui permet pour un ensemble de sommets (vertices) contenant des coordonnées u,v de texture de faire une interpolation de ces coordonénes u,v vers de nouvelles coordonnées u,v définis par un autre tableau de vertices. Mes sommets sont stockés dans une table que je parcours avec une double boucle i,j linérairement. L'interpolation va en fait rapporcher la coordonnées courante tu ou tv (u,v texture) vers la prochaine coordonnées lui correspondante dans le tableau des nouvelles coordonées. Ce rapprochement se fait par un pas d'incrémentation défini par "inctrans" (un flottant) car les coordonnées u,v (tu et tv donc) varient entre 0.0f et 1.0f.
Le problème est le suivant: certaines coordonées u,v n'atteignent jamais leur valeur de destination, pourtant ma procédure me semble bonne. la voici:
"
int completed = 0;
for(int j = 0; j < StepMesh+1; j++) {
for(int i = 0; i < StepMesh+1; i++) {
if( (CurrentTrans[i + (j*(StepMesh+1))].tu + inctrans) < NextTrans[i + (j*(StepMesh+1))].tu)
CurrentTrans[i + (j*(StepMesh+1))].tu += inctrans;
else if( (CurrentTrans[i + (j*(StepMesh+1))].tu - inctrans) > NextTrans[i + (j*StepMesh+1)].tu)
CurrentTrans[i + (j*(StepMesh+1))].tu -= inctrans;
else { CurrentTrans[i + (j*(StepMesh+1))].tu = NextTrans[i + (j*(StepMesh+1))].tu; completed++; }
if( (CurrentTrans[i + (j*(StepMesh+1))].tv + inctrans) < NextTrans[i + (j*(StepMesh+1))].tv)
CurrentTrans[i + (j*(StepMesh+1))].tv += inctrans;
else if( (CurrentTrans[i + (j*(StepMesh+1))].tv - inctrans) > NextTrans[i + (j*(StepMesh+1))].tv)
CurrentTrans[i + (j*(StepMesh+1))].tv -= inctrans;
else { CurrentTrans[i + (j*(StepMesh+1))].tv = NextTrans[i + (j*(StepMesh+1))].tv; completed++; }
}
}
"
la valeur "completed" contient à la fin le nombre de sommets dont l'interpolation est terminée X 2 (car deux coordonnées par sommets: tu et tv).
j'ai remarqué que pour un tableau de taille 2X2, l'erreur survient à la valeur 1,0.tu (comprendre i= 1, j = 0, coordonnées tu)
l'erreur intervient toujours à cet endroit et aussi à d'autres quand le tableau est plus grand.
J'ai en fait pû vérifier que lors du test "if( (CurrentTrans[i + (j*(StepMesh+1))].tu - inctrans) > NextTrans[i + (j*StepMesh+1)].tu)" le programme semble se tromper dans l'évaluation et entraine donc un mauvais résultat. Par exemple si CurrentTrans[i + (j*(StepMesh+1))].tu = 0.9858, que NextTrans[i + (j*StepMesh+1)].tu = 0.985 et que inctrans = 0.001 alors le compilateur va kan même soustraire inctrans à CurrentTrans[i + (j*(StepMesh+1))].tu et ainsi sa valeur (0.9848) va passer en dessous de celle de CurrentTrans[i + (j*(StepMesh+1))].tu, ce qui n'aurait jamais dû arriver !
à la boucle prochaine inctrans est encore décrémentée à CurrentTrans[i + (j*(StepMesh+1))].tu (valant ainsi 0.9838 !!) et ce ne sera qu'à la boucle prochaine que sa valeur va être enfin augmenté (à 0.9848) puis rediminuer (à 0.9838) et ainsi de suite !! Je n'y comprend rien ! j'ai essayé de changer la routine en une autre similaire et dans ce cas les erreurs interviennent sur d'autres (i,j)...
kk'un pourrait-il m'aider ?? merci d'avance pour ceux qui feront l'effort d'essayer de comprendre (car je sais que je n'ai aps été très clair) !
[edtdd]--Message édité par ZZZzzz--[/edtdd]