"Tu veux parler de l´effet eye fish bowl ?"
non, pas tout a fait.
suppose que tu aies un plan vertical, mappe avec une texture faite de 3 lignes verticales : a gauche, et milieu, et a droite.
On regarde ce plan avec une camera telle qu´il soit incline (ie, un mur lateral dans un couloir pour un FPS) ; le plan apparait donc sous forme trapezoide.
Du fait de la perspective, chaque tranche du plan ne represente pas le meme surface a l´ecran (les bandes les plus proches couvrent bcp de l´ecran, alors que les lointaines, tres peu). Si tu projettes tes vertices et interpoles naivemrent tes UV, l´interpolation est lineaire et peut se voir comme une interpolation dans l´espace ecran APRES projection. Donc la texture va s´etaler uniformement sur le trapeze PROJETE, creant par la meme une deformation.
Pour supprimer cette distorsion, il faut interpoler les UV en W=1/Z (espace projectif) : c´est la correction de perspective. De cette maniere, la texture s´etale sur le trapeze en accord avec la projection.
"Pas question de filtrage"
le filtrage des raytracer se fait en software ; de plus le traitement du signal est qqch de tres generique et ne demande aucune specificite materielle. L´acceleration fournie par les cartes 3D n´est qu´un plus, mais on sait bien sur filtrer sans ca.
Principe d´un filtrage bilineaire :
tes UVs sont des flottants, tu les interpoles sur les triangles projetes. Imagine qu´en un pixel qqcq, le calcul te donne le mapping (U0 = 0.654, V0 = 0.412).
A ce stade, il te faut faire qqch pour aller regarder dans la texture la couleur a utiliser.
Solution batarde, le nearest point : tu castes tes UV floats en int, obtenant donc les coordonnees d´un seul pixel de la texture. C´est fini.
Meilleure facon : tu scales tes UVs pour travailler en coordonnes textures, et tu obtiens par ex (669.696, 421.888) pour une texture 1024*1024. La, tu vas pouvoir prendre 4 pixels : (669, 421), (670, 421), (669, 422) et (670, 422). Tu ponderes alors les couleurs de chacun en fonction de la distance par rapport a l´UV de base, et tu obtiens une superbe relation barycentrique prenant en compte 4 couleurs : c´est du filtrage bilineaire.
En condiderant plus de pixels, tu peux filtrer en splines/bezier, etc. Existe aussi l´anisotropic, qui la depend de l´orientation des choses a filtrer.. Plus complique.
Bref, ca marche aussi sur une calcultette, il suffit de faire le calcul pour ne pas utiliser qu´un seul pixel de ta texture.