ok, bon bah.. apres que tu les ai projete a l'ecran.. tu te recupere les deux coords x et y dans l'espace ecran, normalement le z, tu le jette... ms la tu le garde.
ce que tu devrais faire, c'est modifier ton remplisseur pour qu'il texture mappe...
tu les remplis comment tes murs??
l'idee pour de l'affine mapping, c'est d'interpoler les coordonnees U et V dans la texture pour chaque point...
si t'as cette portion de mur:
a
| b
| |
| |
|/ c
d
a:
x = 0
y = 0
z = 10
U = 0
V = 0
b:
x = 15
y = 10
z = 20
U = 31
V = 0
c:
...
...
tu remplis avec des scanlines verticaux, donc tu avance d'un X a chaque scanline.. dc tu prends les X comme reference:
le segment [ab] aura une largeur X de dX = 15 - 0 = 15
la tu calcule les deltas U et V...
dU = Ub - Ua = 31 - 0 = 31
dV = Vb - Va = 0
donc pour chaque X, tu devra incrementer la position du scanline dans la texture de:
Uadd = dU / dX
Vadd = dV / dX
dans le cas de cet exemple: Uadd = 31/15 et Vadd = 0
cd pour remplir, tu fais une boucle du genre
U=Ua;
V=Va;
for (i = 0; i < dX; i++)
{
U+=Uadd;
V+=Vadd;
}
et comme je pense que les V ne changeront pas, tu peux virer tous les calculs ac les V, Vadd, etc.. garder que les U...
et ensuite, dans cette boucle, tu scale le scanline vertical en fct de la hauteur du mur abs(Y1-Y2)
ou Y1 est le Y courant de la partie haute du mur, et Y2 le Y courant de la partie basse du mur...
pour avoir Y1 et Y2, tu utilise le meme systeme d'interpolation que pour la texture, mais cette fois avec Y1add = (Yb-Ya)/dX; Y2add = (Yc-Yd)/dX, tu initialise Y1 a Ya et Y2 a Yd au debut de la boucle, et dans la boucle tu incremente Y1 ac Y1add et Y2 ac Y2 add... ensuite t'as dans la boucle ttes les infos necessaires pour dessiner ton scanline vertical: Y1,Y2 et U
dc en bref ca donne un truc du genre:
U = Ua;
Y1 = Ya;
Y2 = Yd;
dX = Xb - Xa;
Uadd = (Ub - Ua)/dX;
Y1add = (Yb - Ya)/dX;
Y2add = (Yc - Yd)/dX;
for (i = 0; i < dX; i++)
{
U += Uadd;
Y1 += Y1add;
Y2 += Y2add;
scaleVScanline(U, Y1, Y2);
}
et la fct scaleVScanline, ca etire juste entre Y1 et Y2 une colonne de la texture situee en X=U
