text: В коде принимается, что текстура квадратна (наиболее общий случай), а также, что имеется только один канал данных. double getBilinearFilteredPixelColor(Texture tex, double u, double v) { u *= tex.size; v *= tex.size; int x = floor(u); int y = floor(v); double u_ratio = u - x; double v_ratio = v - y; double u_opposite = 1 - u_ratio; double v_opposite = 1 - v_ratio; double result = (tex * u_opposite + tex * u_ratio) * v_opposite + (tex * u_opposite + tex * u_ratio) * v_ratio; return result; } Тот же пример на языке шейдеров HLSL float4 Bilinear(sampler2D tex, float2 texCoord, int texSize) { float2 trTexCoord = texCoord*texSize; float2 texf = floor(trTexCoord); float2 ratio = trTexCoord - texf; float2 opposite = 1.0 - ratio; float4 result = (tex2D(tex, texf/texSize) * opposite.x + tex2D(tex, (texf+float2(1, 0))/texSize) * ratio.x) * opposite.y + (tex2D(tex, (texf+float2(0, 1))/texSize) * opposite.x + tex2D(tex, (texf+float2(1, 1))/texSize) * ratio.x) * ratio.y; return result; } Язык — C Фильтрация текстур Билинейная интерполяция