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