Direct2D 1.1 开发笔记 特效篇(五) 径向模糊

AI权益加码!Claude Code、Cursor等20+工具免费用! 购周边限时加赠Coding Plan Lite,畅享主流AI工具!学习进阶更高效! 阅读详情
(转载请注明出处)

很久没更新博客了, 有点忙, 最近有点疲惫了, 写写新的东西也不错, 这次接着说Direct2D 的特效篇. 有一年多没更新这部分了. 发现代码水平比一年前又提高了不少:)

自从用了vs2015, 腰不酸了, 腿不疼了, 一口气码几百行也不费劲儿. 所以工程代码可能需要Win10 SDK + VS2015才能编译成功. 理论Win8可以, 稍微改下Win7也行, 但是Win10能保证没问题:)

这次要要说说径向模糊:

GIF

微软提供的内建特效中拥有高斯模糊定向模糊. 对于基本应用来说还差个径向模糊.

那么我们现在就动手做一个吧, 先做一个”游戏版”的径向模糊, 稍微简单点:
模糊算法我们大概都懂: 处理后的像素点是原来”附近”几个采样点的加权平均值. 高斯模糊就是高斯函数的加权, 普通就算术平均值即可, 简单.

所以理论上我们只要顺着一个中心点, 进行采样即可.
SAM
比如8个采样点, 强度大致上60%, (当然这是我提供的样图而已, 实际是64个采样点否则不能这么细腻),
这个输出像素点颜色就是:

这个特殊情况的算法

point = ?, ?
center = ?, ?
step = (center - point) / 8 * 0.6
color = 0
for(i: 0...8) color += get_color(point + step*i)
color /= 8

怎么样, 简单吧, 如果强度达到100%, 基本每个点都为有中心点的”基因”(忘记用啥词了).

所以这次依然是用像素着色器, 不过带有常量缓存区了(cbuffer):

// 2D纹理 第一个输入储存在t0
Texture2D InputTexture : register(t0);
// 采样器状态 第一个储存在s0
SamplerState InputSampler : register(s0);

// 常量缓存 (b0)
cbuffer RadialBlurProperties : register(b0) {
    float2  center      : packoffset(c0);
    float   magnitude   : packoffset(c0.z);
    float   samples     : packoffset(c0.w);
};

// Shader入口
float4 main(
    float4 clipSpaceOutput  : SV_POSITION,
    float4 sceneSpaceOutput : SCENE_POSITION,
    float4 texelSpaceInput0 : TEXCOORD0
    ) : SV_Target {
    // 初始化
    float4 color = 0;
    // 计算步进值
    float2 step = (center - texelSpaceInput0.xy) / samples * magnitude;
    // 遍历每个采样点
    for(float i = 0; i < samples; ++i)  {
        // 计算采样地点
        float2 pos = texelSpaceInput0.xy + step * i;
        // 添加采样数据
        color += InputTexture.Sample(InputSampler, pos);
    }
    // 平均
    return color / samples;
}

main函数没什么说的吧, 与之前的特殊情况基本一个道理.

Direct2D 及 WPF手动绘图中的线宽问题 最近在用Direct2d 绘图时,常常遇到绘制直线颜色较浅较粗,不大好看,而WPF自己框架绘制出来的图却是非常的清晰,我用的是纯黑的画笔,线宽是1,绘制的线谱,就显得更像灰色,感觉更粗一些,而这个线谱控件的边框线宽设置的也是1,却显得非常清晰。 我将细节部分放大后看,又发现两线是一样的,这是什么原因呢? 原来,Direct2d绘图引擎,非常强调浮点绘图,所谓浮点绘图,就是允 阅读详情

相关推荐

Direct2D 1.1 开发笔记 特效() 简单的像素着色器特效

使用像素着色器实现一个简单的自定义 Direct2D 特效

dustpg的专栏 5294

Direct2D 内建特效 范例1

Direct2D 1.1 开发笔记 特效() 使用D2D特效》附带资源

Direct2D 1.1 开发笔记 特效() 图形调试

在VS里面调试Direct2D图形

dustpg的专栏 3889

Direct2D 自定义特效01

Direct2D 1.1 开发笔记 特效() 简单的自定义特效》附加资源

手把手教你用Direct2D实现高性能2D动画(附完整代码示例)

本文详细介绍了如何利用Direct2D在Windows平台上实现高性能2D动画。通过对比传统的GDI/GDI+,阐述了Direct2D基于GPU硬件加速带来的性能与视觉质量优势,并提供了从环境搭建、核心对象初始化到创建复杂路径动画的完整代码示例,帮助开发者构建流畅的动态界面。

weixin_29200741的博客 155

Direct2D 1.1 开发笔记 特效() 使用D2D特效

Direct2D 1.1 开发笔记: 如何使用Direct2D 提供的特效接口

dustpg的专栏 8321

[Direct2D1.1教程] Direct2D特效概览

转载请注明出处:http://www.cnblogs.com/Ray1024   一、概述 Direct2D是一个基于Direct3D的2D图形API,可以利用硬件加速特性来提供高性能高质量的2D渲染。但是使用过老版本Direct2D的朋友应该都会发现,如果你想使用它来实现2D图形效果很困难,只能用来做一些基本的绘制和变换。但是最近看了msdn上面Direct2D有了1.11.3版本,这些

i0048egi的专栏 1747

Direct2D实现文字镜像阴影

一、实现思路 先绘制文字阴影部分,绘制阴影文本后应用3DTransform与高斯模糊特效,最后再正常绘制一次文本主体。 二、实现代码 hr = m_pDWriteFactory-&amp;amp;gt;CreateTextFormat( sc_fontName, NULL, DWRITE_FONT_WEIGHT_NORMAL, DWRITE_FO...

ajiangfan的博客 1538

C# 使用 Direct2D 实现斜角效果

Direct2D 是微软新的二维图形 API,可为二维几何图形、位图和文本提供高性能和高质量的呈现。Direct2D 支持硬件加速,无论是绘制速度还是绘制质量,Direct2D 都要比 GDI 和 GDI+ 好很多,不过系统要求 Windows 7 或 Windows Vista SP2 以上。 关于 Direct2D 的一些介绍可以参见微软的帮助《关于 Direct2D》。 Dir...

didiao7566的专栏 502

Win2D特效魔法:掌握60+图像滤镜效果的完整清单

Win2D是一款基于Windows Runtime的2D图形渲染API,它利用GPU加速提供即时模式渲染,支持C#、C++和VB开发语言,专为Windows通用平台(UWP)应用打造。通过Direct2D技术,Win2D实现了高性能图形处理,并与XAML和CoreWindow无缝集成,为开发者提供丰富的图像滤镜和特效功能。 ## 为什么选择Win2D图像特效? Win2D提供超过60种内置图像

gitblog_00134的博客 936

Visual C++界面特效实战:从GDI到Direct2D的百例详解

在Windows桌面应用开发中,界面特效设计是提升用户体验的关键环节。其核心原理在于通过程序精确控制像素渲染,实现视觉增强与动态交互。从经典的GDI/GDI+到硬件加速的Direct2D,不同的图形API为开发者提供了丰富的技术选型。掌握**自绘控件**、**非矩形窗口**等高级渲染技巧,不仅能实现渐变、阴影、动画等现代视觉效果,更能优化性能,避免界面闪烁。这些技术广泛应用于数据可视化、多媒体软件、工具软件等场景,帮助开发者跨越从“功能实现”到“界面精美”的鸿沟。本书通过百个实战案例,系统拆解了Visual

weixin_28826961的博客 246

Win2D入门指南:10分钟学会GPU加速的2D图形渲染

Win2D是一款由微软开发的Windows Runtime API,专门为Windows Universal Platform (UWP)和WinUI3应用提供GPU加速的2D图形渲染功能。无论您是C#、C++还是VB开发者,都能通过这个简单易用的API快速创建高性能的2D图形应用。🎨 ## ✨ Win2D核心优势 Win2D最大的亮点在于它**充分利用了Direct2D的强大功能**,同时

gitblog_00131的博客 407

DWMBlurGlass深度解析:重新定义Windows窗口模糊效果的技术革命

在Windows系统界面美化的技术演进中,DWMBlurGlass以其创新的DWM(桌面窗口管理器)深度集成技术,为全球Windows用户带来了革命性的透明模糊视觉体验。这款开源工具通过底层Hook技术直接干预系统渲染流程,在不影响应用程序正常运行的前提下,实现全局窗口透明模糊效果,为Windows 10和Windows 11用户提供了前所未有的视觉定制能力。DWMBlurGlass的核心价值在于

gitblog_01197的博客 745

技术揭秘:DWMBlurGlass如何为Windows标题栏注入现代视觉特效

在Windows系统长期使用过程中,许多用户面临着界面视觉疲劳、个性化选项有限、多窗口管理混乱等实际问题。DWMBlurGlass作为一款开源工具,通过深度修改桌面窗口管理器(DWM)的渲染管线,为系统全局标题栏添加了可自定义的模糊、亚克力、玻璃等多种现代视觉效果,支持Windows 10和Windows 11系统。 ## 用户痛点分析:三个典型场景的真实困境 ### 场景一:多任务工作者的视

gitblog_00943的博客 148

Java炫彩界面开发:JSCM-Core双引擎实战

图形渲染引擎是现代GUI开发的核心组件,通过底层API调用实现硬件加速渲染。Skija作为Skia的Java绑定提供跨平台支持,而Direct2D则充分发挥Windows平台的DirectX硬件加速优势。这类技术显著提升了Java应用的视觉效果实现能力,特别是在需要复杂渐变、动态光影等高级特效的场景。JSCM-Core创新性地整合了双渲染引擎,开发者可以便捷地实现金属质感、粒子效果等需求,适用于数据可视化、游戏UI等对视觉效果要求较高的领域。通过合理的着色器应用和渲染批处理,即使在Java生态中也能达到接近

weixin_30527423的博客 414
上一篇: Direct3D 12 尝鲜(五): SDK 更新
下一篇: Direct2D 1.3 批精灵
dustpg
博客等级 码龄15年 774粉丝 35原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值