如何解决如何将两层绑定到着色器的输入
我想创建这个区域选择。
为此,我编写了具有两个输入的叠加着色器。
sampler2D Input1;
sampler2D Input2;
float4 main(float2 uv : TEXCOORD) : COLOR
{
float4 foregroundColor = tex2D(Input1,uv);
float4 backgroundColor = tex2D(Input2,uv);
if (foregroundColor.r < 0.5)
{
foregroundColor.r = (foregroundColor.r * backgroundColor.r) / 0.5;
}
else
{
foregroundColor.r = 1 - ((1 - foregroundColor.r) * (1 - backgroundColor.r) / 0.5);
}
if (foregroundColor.g < 0.5)
{
foregroundColor.g = (foregroundColor.g * backgroundColor.g) / 0.5;
}
else
{
foregroundColor.g = 1 - ((1 - foregroundColor.g) * (1 - backgroundColor.g) / 0.5);
}
if (foregroundColor.b < 0.5)
{
foregroundColor.b = (foregroundColor.b * backgroundColor.b) / 0.5;
}
else
{
foregroundColor.b = 1 - ((1 - foregroundColor.b) * (1 - backgroundColor.b) / 0.5);
}
return foregroundColor;
}
在某些 UI 中,我将矩形添加到 Canvas,当鼠标移动时,我会更改矩形大小。
主窗口.xaml
<Grid
x:Name="MainGrid">
<Canvas
x:Name="canvas"
MouseDown="Canvas_MouseDown"
MouseMove="Canvas_MouseMove"
MouseUp="Canvas_MouseUp"
Background="Transparent" />
<Image x:Name="image"
Opacity="0.5"
Panel.ZIndex="-1"/>
</Grid>
MainWindow.cs
private void Canvas_MouseDown(object sender,MouseButtonEventArgs e)
{
startPoint = e.GetPosition(canvas);
rect = new Rectangle
{
Stroke = Brushes.LightBlue,StrokeThickness = 1,RadiusX = 2,RadiusY = 2,};
Canvas.SetLeft(rect,startPoint.X);
Canvas.SetTop(rect,startPoint.Y);
canvas.Children.Add(rect);
}
如何将这些层绑定到着色器?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。