Bilineární filtrování

Bilineární filtrování  je proces extrahování několika pixelů z původní textury a následné zprůměrování jejich hodnot pro získání konečné hodnoty pixelů. Koncept „bilineárního filtrování“, stejně jako podobný koncept „ trilineárního filtrování “, je použitelný pouze pro dvourozměrné textury. Pro trojrozměrné textury tento koncept neplatí. a koncept trilineárního filtrování má jiný význam.

Příklad zdrojového kódu funkce bilineárního filtru

Kód [1] předpokládá, že textura je čtvercová (nejobecnější případ) a že existuje pouze jeden datový kanál.

double getBilinearFilteredPixelColor ( Texture tex , double u , double v ) { u *= tex . velikost ; * = tex . velikost ; int x = podlaha ( u ); int y = podlaha ( v ); double u_ratio = u - x ; double v_ratio = v - y ; double u_oppositio = 1 - u_ratio ; double v_opposite = 1 - v_ratio ; double result = ( 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 ; vrátit výsledek ; }

Stejný příklad v jazyce shader HLSL

float4 Bilinear ( sampler2D tex , float2 texCoord , int texSize ) { float2 trTexCoord = texCoord * texSize ; float2 texf = podlaha ( trTexCoord ); poměr float2 = trTexCoord - texf ; float2 opačný = 1,0 - poměr ; float4 result = ( tex2D ( tex , texf / texSize ) * opačný . x + tex2D ( tex , ( texf + float2 ( 1 , 0 )) / texSize ) * poměr . x ) * opačný . y + ( tex2D ( tex , ( texf + float2 ( 0 , 1 )) / texSize ) * opak . x + tex2D ( tex , ( texf + float2 ( 1 , 1 )) / texSize ) * poměr . x ) * poměr . y ; vrátit výsledek ; }

Viz také

Poznámky

  1. Jazyk – C