WPF 着色器效果 - 抗锯齿不显示

2024-02-25

我遇到一个问题,我有一个 WPF 着色器效果(由 Rene Schulte 修改)来模拟点阵显示 (DMD)。一切都很好,但所有的点都是别名的。

See attached image. enter image description here

我尝试了WPF中的许多功能,以带来抗锯齿,但无济于事。

在构造函数中(文本框中的图像);

RenderOptions.SetBitmapScalingMode(MarqueeTB, BitmapScalingMode.HighQuality);
RenderOptions.SetEdgeMode(MarqueeTB, EdgeMode.Unspecified);
RenderOptions.SetClearTypeHint(MarqueeTB, ClearTypeHint.Enabled);

我不认为这是我的显卡或 Windows 配置的问题。我在两台电脑上做了一些测试,结果相同; Windows 8.1 和 Windows 7。

我不知道如何继续。欢迎任何帮助或建议。

预先感谢,问候, 着色器代码:

//   Project:           Shaders
//
//   Description:       Mosaic Shader for Coding4Fun.
//
//   Changed by:        $Author$
//   Changed on:        $Date$
//   Changed in:        $Revision$
//   Project:           $URL$
//   Id:                $Id$
//
//
//   Copyright (c) 2010 Rene Schulte
//

/// <description>Mosaic Shader for Coding4Fun.</description>

/// <summary>The number pixel blocks.</summary>
/// <type>Single</type>
/// <minValue>2</minValue>
/// <maxValue>500</maxValue>
/// <defaultValue>50</defaultValue>
float BlockCount : register(C0);

/// <summary>The rounding of a pixel block.</summary>
/// <type>Single</type>
/// <minValue>0</minValue>
/// <maxValue>1</maxValue>
/// <defaultValue>0.45</defaultValue>
float Max : register(C2);

/// <summary>The aspect ratio of the image.</summary>
/// <type>Single</type>
/// <minValue>0</minValue>
/// <maxValue>10</maxValue>
/// <defaultValue>1</defaultValue>
float AspectRatio : register(C3);

// Sampler
sampler2D input : register(S0);

// Static computed vars for optimization
static float2 BlockCount2 = float2(BlockCount, BlockCount  / AspectRatio);
static float2 BlockSize2 = 1.0f / BlockCount2; 

// Shader
float4 main(float2 uv : TEXCOORD) : COLOR
{
     // Calculate block center
     float2 blockPos = floor(uv * BlockCount2);
     float2 blockCenter = blockPos * BlockSize2 + BlockSize2 * 0.5;

     // Scale coordinates back to original ratio for rounding
     float2 uvScaled = float2(uv.x * AspectRatio, uv.y);
     float2 blockCenterScaled = float2(blockCenter.x * AspectRatio, blockCenter.y);

     // Round the block by testing the distance of the pixel coordinate to the center
     float dist = length(uvScaled - blockCenterScaled) * BlockCount2;
     if(dist < 0 || dist > Max)
     {
         return 1;
     }

     // Sample color at the calculated coordinate
     return tex2D(input, blockCenter);
}

我不确定这是否是best解决方案,但它有效。请参阅antialiasedCircle部分this https://gamedev.stackexchange.com/a/34598 answer.

//  Project:           Dot Matrix Display (DMD) Shader
//  Inspired from From Mosaic shader Copyright (c) 2010 Rene Schulte


/// <summary>The number pixel blocks.</summary>
/// <type>Single</type>
/// <minValue>2</minValue>
/// <maxValue>500</maxValue>
/// <defaultValue>34</defaultValue>


float BlockCount : register(C0);

/// <summary>The rounding of a pixel block.</summary>
/// <type>Single</type>
/// <minValue>0</minValue>
/// <maxValue>1</maxValue>
/// <defaultValue>0.45</defaultValue>
float Max : register(C2);

/// <summary>The aspect ratio of the image.</summary>
/// <type>Single</type>
/// <minValue>0</minValue>
/// <maxValue>10</maxValue>
/// <defaultValue>1.55</defaultValue>
float AspectRatio : register(C3);

/// <summary>The monochrome color used to tint the input.</summary>
/// <defaultValue>Yellow</defaultValue>
float4 FilterColor : register(C1);

/// <summary>monochrome.</summary>
/// <defaultValue>1</defaultValue>
float IsMonochrome : register(C4);

// Sampler
sampler2D input : register(S0);

// Static computed vars for optimization
static float2 BlockCount2 = float2(BlockCount, BlockCount  / AspectRatio);
static float2 BlockSize2 = 1.0f / BlockCount2; 

float4 setMonochrome(float4 color) : COLOR
{
   float4 monochrome= color;
   if(((int)IsMonochrome) == 1)
   {
      float3 rgb = color.rgb;
      float3 luminance = dot(rgb, float3(0.30, 0.59, 0.11));
     monochrome= float4(luminance * FilterColor.rgb, color.a);
   }
    return monochrome;
}

float4 SetDMD(float2 uv : TEXCOORD, sampler2D samp) : COLOR
{
     // Calculate block center
     float2 blockPos = floor(uv * BlockCount2);
     float2 blockCenter = blockPos * BlockSize2 + BlockSize2 * 0.5;
     
     // Scale coordinates back to original ratio for rounding
     float2 uvScaled = float2(uv.x * AspectRatio, uv.y);
     float2 blockCenterScaled = float2(blockCenter.x * AspectRatio, blockCenter.y);
         
     // Round the block by testing the distance of the pixel coordinate to the center
     float dist = length(uvScaled - blockCenterScaled) * BlockCount2;
     
      float4 insideColor= tex2D(samp, blockCenter);
       
     float4 outsideColor = insideColor; 
         outsideColor.r = 0; 
         outsideColor.g = 0; 
         outsideColor.b = 0; 
         outsideColor.a = 1; 
         
      float distFromEdge = Max - dist;  // positive when inside the circle
     float thresholdWidth = .22;  // a constant you'd tune to get the right level of softness
     float antialiasedCircle = saturate((distFromEdge / thresholdWidth) + 0.5);
     
     return lerp(outsideColor, insideColor, antialiasedCircle);
}

// Shader
float4 main(float2 uv : TEXCOORD) : COLOR
{
     float4 DMD= SetDMD(uv, input);
     DMD = setMonochrome(DMD);
       
     return DMD;
}

Here is an image of the successful solution: enter image description here

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

WPF 着色器效果 - 抗锯齿不显示 的相关文章

  • Windows 8 和 LOB 应用程序

    为 Windows 8 构建业务线应用程序的推荐方法是什么 例如复杂的定制财务应用程序 它们显然不适合 Metro 风格 因此可能会成为常规桌面应用程序 那么建议使用WPF吗 有 vNext 吗 我作为开发人员构建的应用程序类型是桌面风格的
  • 在 MVVM 中哪里可以捕获异常?

    我的视图模型类有一个连接到服务的方法 不确定这是否是一个好的实践 或者视图模型是否应该是严格的属性和属性更改机制 当然 我想在连接或断开连接时处理任何可能的 WCF 异常 让我们使用未找到端点作为示例 考虑到这是一个我想引起用户注意的异常
  • 使用(linq to sql)更新错误

    我有两个表 通过外键 CarrierID 绑定 Carrier CarrierID CarrierName CarrierID 1 CarrierName DHL CarrierID 2 CarrierName Fedex Vendor V
  • 从 WPF 绑定列表框中删除项目

    我有一个带有 ListBox 称为 listMyItems 的 WPF 应用程序 它已成功绑定到我创建的 MyItems 类 我有一个名为 currentMyItems 的 MyItems 列表 然后将其作为 ItemSource 分配给
  • iTextSharp 从 WPF 固定文档生成 PDF

    我有一个简单的 WPF 应用程序 可以显示和打印一些内容 使用固定文档进行报告 如何使用免费且开放的解决方案从中生成 PDF 比如iTextSharp WPF 固定文档 也称为 XPS 文档 是对 PDF 的明显改进 它具有 PDF 所缺乏
  • 设置 TextBlock 以保留开头和结尾的空白?

    EDIT 下面的代码实际上按照我想要的方式工作 这个问题有点误导 请忽略它 通常当我设置Text的财产TextBlock像这样 TextBlock tb new TextBlock tb Text Hello World 文本开头和结尾的空
  • 如何从注册表获取安装的软件路径?

    我需要替换安装在任何驱动器 如 C D E 中的文件 我想从注册表中找到安装的文件路径并将该文件替换为其他文件 软件将安装在任何驱动器中 我想替换文件 我正在使用这段代码 如何使用注册表查找安装的文件路径并替换为 C 中的其他文件 stri
  • WPF MVVM 在窗口关闭时调用 ViewModel Save 方法

    我已经弄清楚如何从我的 ViewModel 关闭窗口 现在我需要从另一侧解决窗口关闭问题 当用户单击窗口的关闭按钮时 我需要在 ViewModel 中触发 Save 方法 我正在考虑将 Command 属性绑定到 Window 的关闭事件
  • 如何以编程方式将访问键(快捷方式)添加到 WPF ContextMenu?

    我已经有以下内容 var myContextMenu new System Windows Controls ContextMenu var exitItem new MenuItem exitItem Header E xit exitI
  • 我对 MVVM 模式有一些疑问

    我叫 Jes s 来自西班牙 是一名 NET 开发人员 几天前我刚刚发现了这个伟大的网络 我有一些关于 MVVM 模式的问题 如果您能回答我 我将很高兴 我三个月前开始使用 WPF 并且学习了 MVP 模式 MVP 非常好 因为您可以很好地
  • 如何在 MVVM 中使用应用程序命令

    我想使用 ApplicationCommands Cut 复制 粘贴 保存 它们看起来很有趣 因为命令路由 键绑定以及某些控件使用它们的事实 我了解如何绑定到虚拟机上的中继 委托命令 但我似乎无法理解应用程序命令 我找到了一些旧的答案 但没
  • 当绑定值为 null 时出现 WPF 日期选择器验证错误

    我有一个 WPF 应用程序 其中使用绑定到实体框架 带有 SQL Server 实体的日期字段的日期选择器 我将其绑定如下
  • 如何覆盖运行时创建的 wpf 控件中的应用程序样式

    我试图在运行时创建一个 WPF 控件 但我不知道如何让它忽略来自 App xml 资源的样式 我尝试将样式设置为 null 并将 OverridesDefaultStyle 设置为 true 但没有成功 应用程序设置将前景设置为白色 我似乎
  • 禁用触发 TextChanged 事件

    I have textbox我正在更改其中的文本lostFocus被解雇了 但这也激发了textChanged事件 我正在处理该事件 但我不希望在这种情况下触发它 我如何在这里禁用它 UPDATE 这个想法与bool很好 但我有几个文本框
  • 专家 C#/.Net/WPF 开发人员应该了解哪些知识? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 在 WPF 树视图中获取 FullPath?

    如果我以编程方式创建 WPF TreeView 例如 TreeView treeView lt added in the designer TreeViewItem rootNode new TreeViewItem rootNode He
  • 如何在 WPF 中从原始帧渲染视频?

    我有一个特殊的摄像机 使用 GigEVision 协议 我使用提供的库进行控制 我可以订阅帧接收事件 然后通过 IntPtr 访问帧数据 在我的旧 WinForms 应用程序中 我可以通过从数据创建 Bitmap 对象并将其设置为 Pict
  • WPF中ViewModel是否应该继承DependencyObject?

    我尝试创建一个简单的UserControl在 WPF 中使用 MVVM 现在我需要为UserControl 所以我尝试在中创建依赖属性UserControlViewModel 我不想处于代码隐藏状态 为了创建依赖属性UserControlV
  • 如何创建一个没有边框且只能通过手柄调整大小的 WPF 窗口?

    如果你设置ResizeMode CanResizeWithGrip 在 WPF 上Window然后右下角会出现一个调整大小的夹点 如下 如果你设置WindowStyle None 标题栏也会消失 但灰色斜边仍然保留 直到您设置ResizeM
  • 使用 WF 的多线程应用程序的错误处理模式?

    我正在写一个又长又详细的问题 但只是放弃了它 转而选择一个更简单的问题 但我在这里找不到答案 应用程序简要说明 我有一个 WPF 应用程序 它生成多个线程 每个线程执行自己的 WF 处理线程和 WF 中的错误 允许用户从 GUI 端进行交互

随机推荐

  • Aiohttp 在浏览器正常打开的某些网站上引发证书错误

    代码示例 import aiohttp import asyncio async def main url async with aiohttp ClientSession as session async with session get
  • 使用 OAuth2 保护 Nodejs / sailsjs API

    我使用 sailsjs 开发了一个 REST API 我想添加 OAuth2 授权来保护此 API 我对 OAuth 很陌生 不知道从哪里开始 我发现了几个可用于此目的的模块 例如 oauth2orize 及其用法示例https githu
  • fastText 中的精确度和召回率?

    我实现了 fastText 进行文本分类 链接https github com facebookresearch fastText blob master tutorials supervised learning md https git
  • AWS AppSync:如何通过 DynamoDB 返回有效的 JSON

    我有一个 AppSync GraphQL API 可以对 DynamoDB 进行查询并返回 JSON 字符串 但是在我的响应映射模板中 我使用内置 util parseJson 功能如所列here https docs aws amazon
  • Jquery Ajax 验证复选框

    可能是一个简单的解决方案 所以我有点尴尬 但 JS 并不是我的强项 所以我想我会问 我正在使用Jquery表单 http jquery malsup com form 用于提交一组复选框以满足我正在制作的活动策划应用程序的要求的插件 如果没
  • 源代码管理中的 .vcxproj

    我一直在阅读很多关于 vcxproj 文件是否应该添加到源代码管理中的问题 共识似乎是他们应该这样做 但是当打开文件时 我注意到其中包含很多用户特定的路径 鉴于这是一个由很多人共同开发的项目 我还应该将其添加到源代码管理中吗 看起来它会与其
  • Json.NET - CustomCreationConverter 中单个属性的默认反序列化行为

    在下面的场景中 我如何得到CrazyItemConverter当遇到我要反序列化的类型中存在的 JSON 属性时 是否照常进行 我有一些如下所示的 JSON Item Name Apple Id null Size 5 Quality 2
  • Symfony sfDoctrineGuardPlugin 自定义登录查询

    我使用 symfony sfDoctrineGuardPlugin 来管理前端用户和后端用户的身份验证 没关系 只是我不希望前端用户能够登录后端应用程序 我可以设置凭据 但在用户通过身份验证后会检查凭据 我想要的是以表单形式登录 永远不会验
  • 使第二个弹性列可滚动

    我看到这个例子来自Flex flex column 内的可滚动 div https stackoverflow com questions 34157058 flex scrollable div inside flex column并尝试
  • 安装 Vuetify 后需要额外的加载器

    使用最新的 VueCli 构建的干净项目 使用 vue add vuetify 添加了 Vuetify 一切正常 添加了身份验证脚本 我今年已经成功使用了 3 次 现在我收到此错误 ERROR Failed to compile with
  • Visual Studio 2015 - 用户任务消失了?

    我最近从 Visual Studio 2013 切换到 2015 并转换了所有旧项目 但是 现在我似乎找不到我的用户任务了 任务列表中曾经有一个下拉菜单 但看起来在新版本中已经消失了 除非我遗漏了一些东西 用户任务是否被删除 如果是这样 我
  • Web3.py:使用待处理过滤器时出现 ValueError

    我正在尝试使用 web3 py 查找 BEP20 网络中的待处理交易 如中所述在这个堆栈溢出问题中 https stackoverflow com questions 57201888 different ways of getting e
  • 使用泛型和协议作为类型参数之间的区别,在函数中实现它们的优缺点是什么

    由于 Swift 允许我们在函数中使用 Protocol 和 Generic 作为参数类型 所以我想到了下面的场景 protocol AProtocol var name String get class ClassA AProtocol
  • 检查php中是否存在session

    在我的 php 函数中 我想检查会话是否存在 根据会话的存在 我想返回 true 或 false 我有一个登录功能 它使用session start 并在登录时将值存储到会话变量中 并且在注销时将执行此操作session destroy 现
  • list.extend 和列表理解[重复]

    这个问题在这里已经有答案了 当我需要向列表中添加几个相同的项目时 我使用 list extend a a b c a extend d 3 Result a b c d d d 但是 如何与列表理解进行类似的操作呢 a a 2 b 2 c
  • CSS @page 中的不同大小:第一个结果整个@page 大小相同

    它与打印有关 并且仅与打印有关 css page size A4 portrait page first size 210mm 1000mm 根据 CSS 的定义 只有首页高度为 1000 毫米 其余页面高度为 297 毫米 A4 但在 C
  • 为什么在 JavaScript 中返回时要使用括号?

    在Restify框架代码中我发现了这个函数 function queryParser options function parseQueryString req res next Some code goes there return ne
  • 获取逗号分隔字符串的第一个值[重复]

    这个问题在这里已经有答案了 我正在寻找从逗号分隔的字符串中获取第一个值的最快 最短的方法 in line 我能做的就是 string a b c d echo The first thing is end array reverse exp
  • 在 Cypher 查询中使用正则表达式捕获组

    在密码中文档 http docs neo4j org chunked milestone query where html regular expressions它说您可以使用正则表达式来匹配字符串属性中的特定 先前已知 模式 是否也可以使
  • WPF 着色器效果 - 抗锯齿不显示

    我遇到一个问题 我有一个 WPF 着色器效果 由 Rene Schulte 修改 来模拟点阵显示 DMD 一切都很好 但所有的点都是别名的 See attached image 我尝试了WPF中的许多功能 以带来抗锯齿 但无济于事 在构造函