Vous utilisez quelle méthode ? des masks de 16 ?
null Le 13/07/2003 à 20:55 Avec celle que j'ai, c'est déjà très rapide est l'affichage prend pas tellement de cycle.
Lorsque j'active l'algo de tri qui bouffe énormément de temps, l'affichage ne se connais même plus.
www.wikio.fr/user1921&info=comments
Tu utilises quelle tri (c pour ton zbuffer je présume)
null Le 13/07/2003 à 21:09 J'ai pas de zbuffer, c'est juste pour les faces. C'est un algo de tri rapide mais je passe de 25-60 fps à 8.
www.wikio.fr/user1921&info=comments
Tu devrais utiliser des BSP pour tes objets, ça t'éviterait de trier.
null Le 13/07/2003 à 21:18 J'y comprends tjrs rien... mais il faut que je m'y mette ! Par contre après il faut programmer un compilo.
Et toi jackiechan, tu programmes un moteur 3D en ce moment, sur Ti, non ?
www.wikio.fr/user1921&info=comments
Au fait, je me pose la question, tu les tries comment précisément tes faces ?
Tu dis que tu utilises un quicksort, c'est ça ?
null Le 14/07/2003 à 10:45 Comme ça :
int partition(int deb, int fin)
{
int compt=deb;
int pivot=Vertex_Buffer[Objet_Face[deb].vertex[0]].z;
int i;
for(i=deb+1;i<=fin;i++)
{
if(Vertex_Buffer[Objet_Face[i].vertex[0]].z<pivot)
{
compt++;
swap(Objet_Face[compt].vertex[0],Objet_Face[i].vertex[0]);
swap(Objet_Face[compt].vertex[1],Objet_Face[i].vertex[1]);
swap(Objet_Face[compt].vertex[2],Objet_Face[i].vertex[2]);
}
}
swap(Objet_Face[compt].vertex[0],Objet_Face[deb].vertex[0]);
swap(Objet_Face[compt].vertex[1],Objet_Face[deb].vertex[1]);
swap(Objet_Face[compt].vertex[2],Objet_Face[deb].vertex[2]);
return(compt);
}
void tri_rapide_bis(int debut,int fin)
{
if(debut<fin)
{
int pivot=partition(debut,fin);
tri_rapide_bis(debut,pivot-1);
tri_rapide_bis(pivot+1,fin);
}
}
void tri_rapide(int longueur)
{
tri_rapide_bis(0,longueur-1);
}
tri_rapide(nbre_faces);
J'ai pris ça sur Internet et j'ai juste modifier deux trois trucs. C'est très mal fait parce-que je déclare cette fonction dans la fonction qui transforme les vertices et qui affivhent les faces. En façit je lé déclare juste avant de l'utiliser.
Mais je trouve que c'est tellment lent que je ne l'utilise pas. Je préfère afficher e or sans trier les faces.
Si les BSP sont bien plus efficace, bah je vais m'enrienter la dessus.
www.wikio.fr/user1921&info=comments
> Vous utilisez quelle méthode ? des masks de 16 ?
Masks de 16 pour les bords, autant de pixels que possible pour le milieu. On utilise des longs si possible, c'est quand même plus rapide en moyenne sur un bench consistant à tracer un certain nombre de fois des lignes allant en x de 0 à N, N étant décrémenté de 239 à 0, à un y quelconque (ça ne joue pas sur la vitesse de la routine, du moins pas de la routine elle-même, car le passage de paramètres diffère très légèrement selon que y est 0 ou pas).
Au fait, jackiechan, il faut enlever les move d(pc,ix) et jmp d(pc,ix) (revenir à ce qui était fait avant, c'est toi qui avais raison, j'avais voulu faire ça quand même pour voir). C'est un peu bête d'avoir à faire une partie spéciale pour certaines lignes de moins de 16 pixels, mais je crois qu'il n'y a pas de bonne solution...
Ah, c'est dommage, moi j'aimais bien ce code, et c'est vrai que c'est frustrant d'avoir tout ce code en plus, surtout qu'il est presqu'identique au code de la fin de la boucle normale (il y a juste le and en plus).
Si seulement on arrivait à trouver un autre moyen de ne pas avoir ce code à la fin...
Mais ça reste plus petit que de faire comme j'avais fait, parce que move d(pc,ix) + jmp d(pc,ix) + tableau de 4 octets = 12 octets * 2, et en plus, l'ancienne méthode ne plante pas si le mode n'est pas compris entre A_REVERSE et A_REPLACE.