voici un algorithme de lignes utilisant seulement la fonction putpixel() (permet d'allumer un pixel) d'Allegro. Donc il est facilement adaptable a une autre librairie graphique.
Je depose cette source en attendant vos critiques et ainsi je pourrais optimiser mon code...
Source / Exemple :
void MyLine(int xdep, int ydep, int xfin, int yfin)
{
float a=0;
int temp=0;
int cste=0;
unsigned int dy;
unsigned int dx;
dx=abs(xfin-xdep);
dy=abs(yfin-ydep);
if(dx>=dy && dx!=0 && dy!=0)
{
if(xdep>xfin)
{
temp=xdep;
xdep=xfin;
xfin=temp;
temp=ydep;
ydep=yfin;
yfin=temp;
}
a=((float)(yfin-ydep)/(xfin-xdep));
for(int x=0;x<dx+1;x++)
{
putpixel(buffer,x+xdep,ydep+(x*a)+cste,makecol(255,255,255));
}
}
if(dx<dy && dx!=0 && dy!=0)
{
if(ydep>yfin)
{
temp=ydep;
ydep=yfin;
yfin=temp;
temp=xdep;
xdep=xfin;
xfin=temp;
}
a=((float)(xfin-xdep)/(yfin-ydep));
for(int y=0;y<dy+1;y++)
{
putpixel(buffer,xdep+(y*a)+cste,y+ydep,makecol(255,255,255));
}
}
if(dx==0)
{
if(ydep>yfin)
{
temp=ydep;
ydep=yfin;
yfin=temp;
}
for(int y=ydep;y<yfin+1;y++)
putpixel(buffer,xdep,y,makecol(255,255,255));
}
if(dy==0)
{
if(xdep>xfin)
{
temp=xdep;
xdep=xfin;
xfin=temp;
}
for(int x=xdep;x<xfin+1;x++)
putpixel(buffer,x,ydep,makecol(255,255,255));
}
}
Conclusion :
Peut etre quand j'aurais le temps je commenterais mon code si ca peut vous aider...
31 juil. 2006 à 14:48
j'ai fait recemment le même type de code mais avec GDK...
Quelqu'un a t'il la même chose avec l'enti-crenelage ? donc avec des get & set/put...
Merci,
14 oct. 2005 à 21:58
Et je me suis rendu compte que faire un moteur 3D en software n'est pas genial...mais au moins j'ai appris quelques trucs a propos de la 3D.
14 oct. 2005 à 08:30
1- Algo pas du tout optimiser, je travail actuellement sur un moteur 3D utilisant la Xlib (linux) de bas niveau, j'utilise un do while pour le principale, quelques if pour la vérification comme:
si (y1 > y2) alors
y1--;
fin
Et oui, si on mets y1 plus grand que y2 il ne trouvera jamais le bout de la boucle...
Sinon, je suppose que cela pourrai servir pour une personne qui veut fqaire un moteur 3d avec allegro (et oui)
Cette lib est peut-etre 2d mais en faisant ces fonction, comme toi, on peut facilement faire un moteur 3d en mode fil de fer.
25 déc. 2004 à 15:48
mettez au moins quelques lignes de commentaire et salut Kirua
ahhhhhhhhhh
a++
25 déc. 2004 à 15:47
mettez au moins quelques lignes de commentaire et salut Kirua
ahhhhhhhhhh
a++
Vous n'êtes pas encore membre ?
inscrivez-vous, c'est gratuit et ça prend moins d'une minute !
Les membres obtiennent plus de réponses que les utilisateurs anonymes.
Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.
Le fait d'être membre vous permet d'avoir des options supplémentaires.