我在程序中制作了双线性绘图功能。
void bilinear_Plot(float2 temppos,float4 color)
{
float2 p;
p.x=Frac(temppos.x);
p.y=Frac(temppos.y);
float weights[] = {(1.0f-p.x)*(1.0f-p.y), p.x*(1.0f-p.y), (1.0f-p.x)*p.y, p.x*p.y};
int2 _position = int2(floor(temppos.x),floor(temppos.y));
writepixel(_position.x,_position.y,color*weights[0]);
writepixel(_position.x+1,_position.y,color*weights[1]);
writepixel(_position.x,_position.y+1,color*weights[2]);
writepixel(_position.x+1,_position.y+1,color*weights[3]);
}
但我想添加Bicubic绘图。 这是一种有点天真的方法,看起来不对,并且没有规范化。
void bicubic_Plot(float2 temppos,float4 color)
{
float2 p;
p.x=Frac(temppos.x);
p.y=Frac(temppos.y);
float weights[] = {(2.0f-p.x)*(2.0f-p.y), (1.0f-p.x)*(2.0f-p.y), (p.x)*(2.0f-p.y),
(2.0f-p.x)*(1.0f-p.y), (1.0f-p.x)*(1.0f-p.y), p.x*(1.0f-p.y),
(2.0f-p.x)*p.y, (1.0f-p.x)*p.y, p.x*p.y
};
int2 _position = int2(floor(temppos.x),floor(temppos.y));
writepixel(_position.x,_position.y,color*weights[0]);
writepixel(_position.x-1,_position.y,color*weights[1]);
writepixel(_position.x+1,_position.y,color*weights[2]);
writepixel(_position.x,_position.y-1,color*weights[3]);
writepixel(_position.x-1,_position.y-1,color*weights[4]);
writepixel(_position.x+1,_position.y-1,color*weights[5]);
writepixel(_position.x,_position.y+1,color*weights[6]);
writepixel(_position.x-1,_position.y+1,color*weights[7]);
writepixel(_position.x+1,_position.y+1,color*weights[8]);
}
这是否是接近双三次绘图的错误方法?