开发者

Silverlight: Polygon in combination with Pixel Shaders

开发者 https://www.devze.com 2023-01-06 15:00 出处:网络
I am new to Silverlight and I got a small problem with effects in combination with polygons. I want to achieve that the rendering of the shader is only inside the edges instead of also outside the edg

I am new to Silverlight and I got a small problem with effects in combination with polygons. I want to achieve that the rendering of the shader is only inside the edges instead of also outside the edges. As you see the brush is doing this, but not the output of the shader. Anybody knows a solution to fix this? Is there a way to get the output of the pixel shader and push that into the fill property of polygon?

Result: http://img64.imageshack.us/img64/2831/achieve.jpg

This is my xaml code:

<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> 

This is my shader in 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;
}


Hmm... just looking at it quickly it seems to me that you can acheive the same thing by placing two Images in a Grid (with the overlay last). Where the overlay has Alpha of 0 the other image will be seen. You can then assign your ploygon geomerty to the Grid.Clip property.

0

精彩评论

暂无评论...
验证码 换一张
取 消