Bilinjär filtrering är processen att extrahera flera pixlar av den ursprungliga texturen och sedan beräkna ett genomsnitt av deras värden för att erhålla det slutliga pixelvärdet. Begreppet "bilinjär filtrering", precis som det liknande konceptet " trilinjär filtrering ", är endast tillämpligt på tvådimensionella texturer. För tredimensionella texturer är detta koncept inte tillämpligt. , och begreppet trilinjär filtrering har en annan innebörd.
Koden [1] antar att texturen är kvadratisk (det mest allmänna fallet) och att det bara finns en datakanal.
double getBilinearFilteredPixelColor ( Texture tex , double u , double v ) { u *= tex . storlek ; * = tex . storlek ; int x = golv ( u ); int y = golv ( v ); dubbelt u_förhållande = u - x ; dubbel v_kvot = v - y ; dubbel u_motsatt = 1 - u_förhållande ; dubbel v_motsatt = 1 - v_förhållande ; dubbelt resultat = ( tex [ x ][ y ] * u_opposite + tex [ x + 1 ][ y ] * u_ratio ) * v_opposite + ( tex [ x ][ y + 1 ] * u_opposite + tex [ x + 1 ][ y + 1 ] * u_ratio ) * v_ratio ; returnera resultat ; }Samma exempel i HLSL shader-språk
float4 Bilinear ( sampler2D tex , float2 texCoord , int texSize ) { float2 trTexCoord = texCoord * texSize ; float2 texf = golv ( trTexCoord ); float2 ratio = trTexCoord - texf ; float2 motsatt = 1,0 - förhållande ; float4 resultat = ( tex2D ( tex , texf / texSize ) * motsatt . x + tex2D ( tex , ( texf + float2 ( 1 , 0 )) / texSize ) * förhållande . x ) * motsatt . y + ( tex2D ( tex , ( texf + float2 ( 0 , 1 )) / texSize ) * motsatt . x + tex2D ( tex , ( texf + float2 ( 1 , 1 )) / texSize ) * förhållande . x ) * förhållande . y ; returnera resultat ; }