Silverlight:多边形与像素着色器的结合

发布于 2024-09-08 18:41:07 字数 1325 浏览 2 评论 0原文

我是 Silverlight 新手,在与多边形结合的效果方面遇到了一个小问题。我想实现着色器的渲染仅在边缘内部而不是也在边缘外部。正如您所看到的,画笔正在执行此操作,但着色器的输出并未执行此操作。有人知道解决这个问题的解决方案吗?有没有办法获取像素着色器的输出并将其推入多边形的填充属性中?

结果: http://img64.imageshack.us/img64/2831/achieve.jpg< /a>

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

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

娇俏 2024-09-15 18:41:07

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

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.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文