Silverlight: полигон в сочетании с пиксельными шейдерами - PullRequest
1 голос
/ 08 июля 2010

Я новичок в 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 голосов
/ 08 июля 2010

Хм ... просто глядя на это быстро, мне кажется, что вы можете добиться того же, поместив два изображения в Grid (с последним наложением).Там, где наложение имеет альфа 0, будет видно другое изображение.Затем вы можете присвоить свой ploygon geomerty свойству Grid.Clip.

...