Sommaire
Introduction
Cette page est consacrée aux explications dite de techniques d'affichage de forme primitive à l'écran. Il ne s'agit pas d'un absolu, mais d'une présentation des différentes techniques d'affichage utilisé pour obtenir une performance acceptable. Entre autre, on retrouvera les fabuleux méthode du mathématicien français, Bézier, de CAO ayant permis d'offrir une performance accrue et même légendaire dans le domaine du visuel des formes géométriques.
Traçage de ligne
La technique suivante, est sans aucun doute la plus performante. Elle n'utilise absolument aucune formule compliquer avec les COS et SIN ralentissant les opérations du processeur. Le génial Bézier à eu l'idée d'utiliser une technique à escalier. Celui-ci à constate qu'on n'a pas besoin d'afficher chacun des points dans un aspect géométrique mais qu'on doit plutôt connaître les intervalles verticales et horizontal que la ligne doit avoir. En somme remarquera qu'une ligne parcourant la largeur de l'écran par exemple, mais ayant un simple décalage de deux ou trois pixels plus bas à l'autre extrémité semble n'être rien d'autre qu'une suite de ligne horizontal brisé! Et bien, étant donnée l'affichage linéaire qu'utilise les ordinateurs, la constation exacte. On doit simplement déterminer la longueur de ses lignes et les afficher jusqu'à atteindre la cible.
Afin de permet une meilleure compréhension de cette techniques, nous avons décidé d'introduire l'algorithme suivant:
MODULE Ligne(variable X1 , variable Y1 , variable X2 , variable Y2 , variable Couleur ) SI Y2 = Y1 ALORS Afficher Ligne Horizontale ( X1 , Y1 , X2 ), Couleur SINON SI Abs ( X2 X1 ) < Abs( Y2 - Y1 ) ALORS SI Y1 > Y2 ALORS ECHANGER X1
, X2 FIN SI
Direction Incrémentation ← 1 SINON Direction Incrémentation ← -1 FIN SI
SI Delta >= 0 ALORS J ←
J + Direction Incrémentation SINON Delta ← Delta + B inc FIN SI
FIN BOUCLE FAIRE TANT QUE SINON SI Y1 > Y2 ALORS ECHANGER X1
, X2 FIN SI
Direction Incrémentation ← 1 SINON Direction Incrémentation ← -1 FIN SI
SI Delta >= 0 ALORS J ←
J + Direction Incrémentation SINON Delta ← Delta + B inc FIN SI
FIN SI FIN SI FIN SI |
Voici maintenant la même routine écrit en langage de programmation Pascal permettant d'effectuer l'opérations d'affichage d'une ligne à afficher. On remarquera qu'il n'y a aucune variable un besoin d'un nombre à virgule flottante (nombre réel) pour obtenir le résultat escompter.
Procedure
Ligne(X1,Y1,X2,Y2,Color:Word);
Var
D,DX,DY,I,J,Ainc,Binc,Ic:Integer;
Begin
If(Y2=Y1)Then
Begin
LigneHorizontal(X1,Y1,X2,Color);
Exit;
End;
If
Abs(X2-X1)<Abs(Y2-Y1)Then
Begin
If(Y1>Y2)Then
ASM
MOV AX,X1
XCHG AX,X2
MOV X1,AX
MOV AX,Y1
XCHG AX,Y2
MOV Y1,AX
END;
If(X2>X1)Then
Ic:=1
Else
Ic:=-1;
DY:=Y2-Y1;DX:=Abs(X2-X1);D:=(DX
shl
1)-DY;Ainc:=(DX-DY)shl
1;Binc:=DX
shl
1;J:=X1;
SetPixel(X1,Y1,Color);
I:=Y1+1;
While(I<=Y2)do
Begin
If D>=0Then
Begin
Inc(J,Ic);
Inc(D,Ainc)
End
else
Inc(D,Binc);
SetPixel(J,I,Color);
Inc(I);
End;
End
else
Begin
If(X1>X2)Then
ASM
MOV AX,X1
XCHG AX,X2
MOV X1,AX
MOV AX,Y1
XCHG AX,Y2
MOV Y1,AX
END;
If(Y2>Y1)Then
Ic:=1
else
Ic:=-1;
DX:=X2-X1;DY:=Abs(Y2-Y1);D:=(DY
shl 1)-DX;AInc:=(DY-DX)shl
1;BInc:=DY
shl 1;J:=Y1;
SetPixel(X1,Y1,Color);
I:=X1+1;
While(I<=X2)do
Begin
If
D>=0Then
Begin
Inc(J,Ic);
Inc(D,Ainc)
End
else
Inc(D,Binc);
SetPixel(I,J,Color);
Inc(I);
End;
End;
End;