【问题标题】:Silverlight: Polygon in combination with Pixel ShadersSilverlight:多边形与像素着色器的结合
【发布时间】:2010-07-08 08:22:19
【问题描述】:

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

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-29
      • 1970-01-01
      • 1970-01-01
      • 2011-10-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多