30

Vous utilisez quelle méthode ? des masks de 16 ?

31

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

32

Tu utilises quelle tri (c pour ton zbuffer je présume)

33

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

34

Tu devrais utiliser des BSP pour tes objets, ça t'éviterait de trier.

35

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

36

Non pas en ce moment

37

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 ?

38

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

39

> 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...
avatar
Membre de la TI-Chess Team.
Co-mainteneur de GCC4TI (documentation en ligne de GCC4TI), TIEmu et TILP.
Co-admin de TI-Planet.

40

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).

41

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.
avatar
Membre de la TI-Chess Team.
Co-mainteneur de GCC4TI (documentation en ligne de GCC4TI), TIEmu et TILP.
Co-admin de TI-Planet.