1

我是 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;
}
4

1 回答 1

0

嗯...只是快速看一下,在我看来,您可以通过将两个图像放在一个中Grid(最后叠加)来实现相同的目标。如果叠加层的 Alpha 为 0,则会看到其他图像。然后,您可以将您的多边形几何体分配给该Grid.Clip属性。

于 2010-07-08T09:36:43.123 回答