Bilineare Texturfilterung (Direct3D 9)
Texturen werden immer linear von (0,0, 0,0) in der oberen linken Ecke bis (1,0, 1,0) in der unteren rechten Ecke adressiert, wie in der folgenden Abbildung dargestellt.

Texturen werden in der Regel so dargestellt, als würden sie aus soliden Farbblöcken bestehen, aber es ist tatsächlich korrekter, sich Texturen so zu überlegen, wie Sie sich die Rasteranzeige vorstelle: Jedes Texel wird genau in der Mitte einer Rasterzelle definiert, wie in der folgenden Abbildung dargestellt.

Wenn Sie den Texturs sampler nach der Farbe dieser Textur bei UV-Koordinaten (0,375, 0,375) fragen, erhalten Sie Volltonrot (255, 0, 0). Dies ist sinnvoll, da der genaue Mittelpunkt der roten Texelzelle bei UV (0,375, 0,375) liegt. Was passiert, wenn Sie den Sampler nach der Farbe der Textur bei UV (0,25, 0,25) fragen? Das ist nicht ganz so einfach, da der Punkt bei UV (0,25, 0,25) genau an der Ecke von 4 Texeln liegt.
Das einfachste Schema besteht einfach in der Rückgabe der Farbe des nächstgelegenen Texels durch den Sampler. Dies wird als Punktfilterung bezeichnet (siehe Nearest-Point Sampling (Direct3D 9)) und ist aufgrund von intervalligen oder blockigen Ergebnissen in der Regel nicht erwünscht. Die Punktstichproben unserer Textur bei UV (0,25, 0,25) zeigen ein weiteres subtiles Problem bei der Filterung am nächsten Punkt: Es gibt vier Texel, die vom Samplingpunkt gleich sind, sodass es keinen einzigen nächstgelegenen Texel gibt. Eines dieser vier Texel wird als zurückgegebene Farbe ausgewählt, aber die Auswahl hängt davon ab, wie die Koordinate gerundet wird. Dies kann zu Tränkungsartefakten führen (siehe den Artikel Nearest-Point Sampling im SDK).
Ein etwas genaueres und häufigeres Filterschema ist die Berechnung des gewichteten Durchschnitts der vier Texel, die dem Samplingpunkt am nächsten liegen. Dies wird als bilineare Filterung bezeichnet, und die zusätzlichen Berechnungskosten sind in der Regel vernachlässigbar, da diese Routine in moderner Grafikhardware implementiert wird. Dies sind die Farben, die wir an einigen verschiedenen Beispielpunkten erhalten, indem wir die bilineare Filterung verwenden:
UV: (0.5, 0.5)
Dieser Punkt befindet sich am genauen Rahmen zwischen roten, grünen, blauen und weißen Texeln. Die Farbe, die der Sampler zurückgibt, ist grau:
0.25 * (255, 0, 0)
0.25 * (0, 255, 0)
0.25 * (0, 0, 255)
## + 0.25 * (255, 255, 255)
------------------------
= (128, 128, 128)
UV: (0.5, 0.375)
Dieser Punkt befindet sich am Mittelpunkt des Rahmens zwischen roten und grünen Texeln. Die Farbe, die der Sampler zurückgibt, ist gelbgrau (beachten Sie, dass die Beiträge der blauen und weißen Texel auf 0 skaliert werden):
0.5 * (255, 0, 0)
0.5 * (0, 255, 0)
0.0 * (0, 0, 255)
## + 0.0 * (255, 255, 255)
------------------------
= (128, 128, 0)
UV: (0.375, 0.375)
Dies ist die Adresse des roten Texels, bei dem es sich um die zurückgegebene Farbe handelt (alle anderen Texel in der Filterberechnung werden auf 0 gewichtet):
1.0 * (255, 0, 0)
0.0 * (0, 255, 0)
0.0 * (0, 0, 255)
## + 0.0 * (255, 255, 255)
------------------------
= (255, 0, 0)
Vergleichen Sie diese Berechnungen mit der folgenden Abbildung, die zeigt, was geschieht, wenn die berechnung der bilinearen Filterung an jeder Texturadresse in der 4x4-Textur ausgeführt wird.
