HLSL,使用texcoord比较像素位置到中心

时间:2014-04-03 01:11:34

标签: xna hlsl pixel-shader

这是我第一次使用HLSL,我尝试创建像圆形擦除一样的图像过渡。要做到这一点,我只想看到某个半径范围内的像素,这就是我到目前为止所拥有的......

float4 PixelShaderFunction(float2 inCoord: TEXCOORD0) : COLOR
{
    float4 color = tex2D(screen, inCoord);

    if (incoord 
    {
        color.rgba = color.rgba - 255
    }

    return color;
}

如果用简单的英语声明,那么我的意思是......

if incoor.X - center.X < 5 or > -5 and incoor.Y - center.Y < 5 or > -5

我可能会以完全错误的方式解决这个问题,所以请告诉我我有多少白痴。任何帮助都会受到超级赞赏,我将特别感谢您的游戏积分!

P.S。我正在使用XNA 4和C#

1 个答案:

答案 0 :(得分:1)

在HLSL中,所有通道值都被操作为float4 s,这意味着每个通道都是浮点数。最大值不是255,而是1.0f。

纹理的中心始终为float2 center = float2(0.5f, 0.5f);,因为所有位置都不是基于像素或纹素,而是标准化浮动位置(0,0是左上角和1 ,1是右下角)。您的像素着色器没有纹理像素尺寸的概念,除非您在应用它之前在SetParameter调用效果中专门设置它们。

根据这些信息,设置你想要的θ(角度)并在着色器中做一些简单的触发以获得距离中心的距离等应该只是一件小事。

希望有所帮助!