Silverlight:Polygon与Pixel Shaders结合使用

时间:2010-07-08 08:22:19

标签: c# silverlight silverlight-4.0 c#-4.0 hlsl

我是Silverlight的新手,我遇到了一个与多边形结合的小问题。我想实现着色器的渲染仅在边缘内部而不是在边缘之外。如您所见,刷子正在执行此操作,但不是着色器的输出。有谁知道解决这个问题的解决方案?有没有办法获取像素着色器的输出并将其推入多边形的填充属性?

结果:http://img64.imageshack.us/img64/2831/achieve.jpg

这是我的xaml代码:

<Polygon Name="TestPolygonWithEffect" Stroke="Black" StrokeThickness="1">
  <Polygon.Points>
    <Point X="100" Y="0"></Point>
    <Point X="0" Y="200"></Point>
    <Point X="200" Y="200"></Point>
  </Polygon.Points>
  <Polygon.Fill>
    <ImageBrush ImageSource="Roof.jpg"></ImageBrush>
  </Polygon.Fill>
  <Polygon.Effect>
    <f:TestShaderEffect>
      <f:TestShaderEffect.Overlay>
        <ImageBrush ImageSource="OverlayTest.png"></ImageBrush>
      </f:TestShaderEffect.Overlay>
    </f:TestShaderEffect>
  </Polygon.Effect>
</Polygon> 

这是我在HLSL中的着色器

sampler2D input : register(s0);
sampler2D overlay : register(s1);

float4 main(float2 uv : TEXCOORD) : COLOR
{
 float4 returnColor = tex2D(overlay, uv);

 if(returnColor.a == 0.0f)
  return tex2D(input, uv);
 else
  return returnColor;
}

1 个答案:

答案 0 :(得分:0)

嗯...只是快速地看着它,在我看来,你可以通过在Grid中放置两个图像来实现同样的效果(覆盖最后)。如果叠加层的Alpha为0,则会看到另一个图像。然后,您可以将ploygon geomerty分配给Grid.Clip属性。