想检测一个像素的上下左右相邻像素的颜色,再进一步处理.
一开始准备通过UV坐标计算出一个偏移值,这样一个像素点只要检测一次相邻像素就好了,但问题就出现了
效果图如下

(没问题的)

(有问题的)

有问题图的代码:
//主要功能,如果片元的UV坐标在像素的方向为上时,如果和左边像素颜色不同,则染黑,方向为下时,也是检测左边的像素(这个左是相对的,绝对坐标其实是右像素),颜色不同则染黑
bool isup = (abs(interPosition.y)>abs(interPosition.x))&&(interPosition.y>0);
bool isdown = (abs(interPosition.y)>abs(interPosition.x))&&(interPosition.y<0);
offset = isup*float2(-PixleStep.x,0)+isdown*float2(PixleStep.x,0);
bool exist_leftBorder = false;
//这里使用offset计算采样
fixed4 left_Color = tex2D(_MainTex, centerSamplerPosition+offset);
exist_leftBorder = step(0.001,length(left_Color-col));
if(exist_leftBorder)
{
return float4(0,0,0,1);
}
效果正常的:
bool isup = (abs(interPosition.y)>abs(interPosition.x))&&(interPosition.y>0);
bool isdown = (abs(interPosition.y)>abs(interPosition.x))&&(interPosition.y<0);
bool exist_leftBorder = false;
if(isup)
{
//这里不使用offset采样
fixed4 left_Color = tex2D(_MainTex, centerSamplerPosition+float2(-PixleStep.x,0));
exist_leftBorder = step(0.001,length(left_Color-col));
}
if(isdown)
{
fixed4 left_Color = tex2D(_MainTex, centerSamplerPosition+float2(PixleStep.x,0));
exist_leftBorder = step(0.001,length(left_Color-col));
}
if(exist_leftBorder)
{
return float4(0,0,0,1);
}
怎么看两个代码都差不多啊,为什么结果会不同呢

求各位大佬看看原因
