Les références indiquent "Renvoie la moyenne pondérée des quatre éléments de texture les plus proches des coordonnées de texture spécifiées". Comment sont-ils pondérés? Et qu'en est-il des textures 3D, n'utilise-t-il encore que 4 texels pour l'interpolation ou plus?Quel algorithme utilise GL_LINEAR exactement?
Répondre
dans textures 2D y a 4 échantillons utilisés qui signifie interpolation bi-linéaire de sorte 3x interpolation linéaire. Le poids est la distance normalisée du texel cible à ses 4 voisins.
Ainsi, par exemple, vous voulez que le texel à
(s,t)=(0.21,0.32)
mais la texture à proximité texels a des coordonnées:
(s0,t0)=(0.20,0.30)
(s0,t1)=(0.20,0.35)
(s1,t0)=(0.25,0.30)
(s1,t1)=(0.25,0.35)
les poids sont:
ws = (s-s0)/(s1-s0) = 0.2
wt = (t-t0)/(t1-t0) = 0.4
textels de Interpole si linéaires à s
direction
c0 = texture(s0,t0) + (texture(s1,t0)-texture(s0,t0))*ws
c1 = texture(s0,t1) + (texture(s1,t1)-texture(s0,t1))*ws
et enfin en direction t
:
c = c0 + (c1-c0)*wt
où texture(s,t)
rendements couleur de texel à s,t
tandis que la coordonnée correspond à texel exacte et c
est la couleur de texel interpolée finale.
En réalité, les coordonnées s,t
sont multipliées par la résolution de texture (xs,ys
) qui les convertit en unités de texel. après que s-s0
et t-t0
est déjà normalisé, donc pas besoin de diviser par s1-s0
et t1-t0
car ils sont stand égal à un. si:
s=s*xs; s0=floor(s); s1=s0+1; ws=s-s0;
t=t*ys; t0=floor(t); t1=t0+1; wt=t-t0;
c0 = texture(s0,t0) + (texture(s1,t0)-texture(s0,t0))*ws;
c1 = texture(s0,t1) + (texture(s1,t1)-texture(s0,t1))*ws;
c = c0 + (c1-c0)*wt;
Je ne ai jamais utilisé textures 3D avant, mais dans ce cas, il utilise 8 textels et il est appelé tri-interpolation linéaire qui est 2x interpolation bilinéaire simplement prendre 2 textures les plus proches et calculer chacun interpolation bilinéaire et juste calculer la texel finale par interpolation linéaire basée sur la u
coordonnée de la même manière exacte ... si
u=u*zs; u0=floor(u); u1=u0+1; wu=u-u0;
c = cu0 + (cu1-cu0)*wu;
où zs
est le nombre de textures, cu0
est résultat de interpolation bilinéaire texture à u0
et cu1
à u1
. Ce même principe est utilisé pour mipmaps ...
Toutes les coordonnées peuvent avoir été de 0,5 texel excentrée et aussi la multiplication de résolution peut être fait avec xs-1
au lieu de xs
en fonction de vos paramètres de serrage ...
En tant qu'observateur extérieur, je spéculerais que c'est juste l'interpolation linéaire 2D. –
@OliverCharlesworth Il est bilinéaire ... – Spektre