ShaderGraph反正切节点全解析:从数学原理到实战应用
1. 项目概述为什么ShaderGraph的反正切节点值得深挖在Unity ShaderGraph的众多数学节点里反正切节点Arctangent Node和它的兄弟Arctangent2节点可能是最容易被新手开发者忽略但又在特定场景下不可或缺的“隐藏高手”。很多朋友刚接触ShaderGraph时看到正弦Sine、余弦Cosine节点用得飞起但一看到“Arctangent”这个带着“Arc”前缀、名字更长的函数心里就有点发怵觉得这肯定是高等数学里的复杂玩意儿用不上也懒得学。我刚开始做Shader时也这么想直到有一次我需要为一个项目实现一个基于方向的角度渐变遮罩或者想根据物体表面法线与视角的夹角来驱动一些高级效果比如边缘光或菲涅尔效应的变体时才发现常规的Dot Product点积配合Saturate饱和出来的线性结果总是差那么点意思——要么过渡不够自然要么控制不够精细。这时翻看数学节点列表反正切函数就成了破局的关键。它本质上是一个“角度求解器”能把我们熟悉的比值比如y/x转换回一个角度值。这个从“斜率”到“角度”的转换能力在Shader的世界里恰恰是连接方向数据与可视化参数的桥梁。简单来说如果你在Shader中处理任何与方向、角度、旋转、坐标相位相关的问题反正切节点很可能就是你要找的那把钥匙。它不像乘除加减那样直观但一旦理解了其输入输出特性你就能解锁许多依靠常规线性运算难以实现的、具有非线性美感的视觉效果。本文将彻底拆解这个节点从数学原理、ShaderGraph中的两种形态Arctangent 和 Arctangent2到具体的应用场景和实战案例让你不仅能看懂更能真正把它用起来。2. 数学原理快速回顾反正切到底是什么在深入节点之前我们花几分钟把数学概念理清。放心这里不搞复杂的公式推导只讲对Shader创作有用的部分。正切Tangent是什么在直角三角形里对于一个锐角它的正切值定义为对边长度除以邻边长度即tan(θ) y / x。这是一个从角度到比值的映射。那么反正切Arctangent就是上述过程的逆运算。给你一个比值y/x它告诉你这个比值对应的角度θ是多少。用数学表达式就是θ arctan(y/x)。这里就引出了核心问题已知一个比值对应的角度有多少个答案是无穷多个因为角度每增加360度2π弧度正切值会重复。例如tan(45°) 1tan(225°) 1同样成立。所以为了得到一个唯一、确定的结果数学上需要定义函数的主值区间。单参数反正切atan/Arctangent这是我们最常见的arctan(y/x)。它的输出范围被限定在-π/2 到 π/2 弧度即 -90° 到 90°之间。这意味着它只能返回第一象限0°-90°和第四象限-90°-0°的角度。它丢失了关于输入(x, y)点所在象限的信息。因为比值y/x为正时点可能在第一象限x, y均正或第三象限x, y均负但atan无法区分统一返回第一象限的角度。双参数反正切atan2/Arctangent2为了解决上述问题atan2(y, x)应运而生。它接受两个独立的参数y和x而不仅仅是它们的比值。通过分别检查y和x的符号它可以精确地判断出点(x, y)落在哪个象限从而返回一个范围在-π 到 π 弧度即 -180° 到 180°之间的、唯一确定的角度。这个角度是以正X轴为起点逆时针旋转到点(x, y)所形成的角度。一个极佳的生活化类比想象你在一个十字路口中心。有人只告诉你“你向前走和向右走的距离比例是1:1”你只能猜自己可能在东北方向或西南方向对应atan的歧义。但如果有人明确告诉你“你向东走了100米向北也走了100米”你就能100%确定自己在东北方向对应atan2的精确性。在ShaderGraph中Arctangent 节点对应atan Arctangent2 节点对应atan2。理解它们输出范围的差异是正确选用的第一步。2.1 ShaderGraph中的实现与数据格式在ShaderGraph的数学节点分类下你可以找到这两个节点。它们都接受Float、Vector 2, 3, 4等多种数据类型输入。当输入是向量时操作是逐分量Component-wise执行的。也就是说如果你输入一个Vector2它会分别计算这个Vector2的y分量和x分量的反正切对于Arctangent2则是两个独立的输入通道输出一个相同维度的向量每个分量都是一个角度值默认单位是弧度。这里有一个非常重要的实操细节Shader中三角函数运算通常使用弧度制。虽然ShaderGraph提供了Degrees to Radians和Radians to Degrees节点进行转换但直接使用弧度制与大多数数学节点如Sine、Cosine配合更自然。当你需要将反正切的结果用于颜色输出或范围在[0,1]的参数时通常需要对其进行Remap重映射。例如Arctangent2的输出范围是[-π, π]。如果你想把它映射到UV坐标常用的[0, 1]范围可以使用Remap节点Old Min -PI, Old Max PI, New Min 0, New Max 1。Unity中π的值可以通过一个Pi节点获得。3. 核心节点解析Arctangent vs. Arctangent2现在让我们把这两个节点并排放在ShaderGraph画布上仔细看看它们的区别。3.1 Arctangent 节点详解节点接口只有一个输入端口In一个输出端口Out。功能计算arctan(In)。对于向量输入计算每个分量的arctan。输出范围[-π/2, π/2]弧度。典型连接通常你需要一个比值。例如将某个Vector2的y分量除以x分量使用Divide节点再将结果输入给Arctangent。// 其背后的近似HLSL代码 float arctanResult atan(inputRatio); // 对于VectorN则是逐分量计算使用场景与局限 由于它丢失了象限信息其使用场景相对受限。它适用于你已经知道或不关心角度所在象限且输入比值能明确代表所需角度的情况。例如计算一个斜率的角度而这个斜率你确定它只代表第一或第四象限的倾斜度。一个更常见的用法是处理已经归一化到[-1,1]区间的信号将其映射到角度范围。但即便如此Arctangent2因其全象限覆盖能力通常是更安全、更通用的选择。3.2 Arctangent2 节点详解节点接口有两个输入端口A和B一个输出端口Out。功能计算atan2(A, B)。请注意Unity ShaderGraph的端口顺序根据官方文档片段它描述为“返回输入A和输入B的值的反正切值”。在大多数编程语言如HLSL、GLSL中atan2的函数签名是atan2(y, x)。因此在ShaderGraph中通常A 端口对应 yB 端口对应 x。这一点至关重要连接反了会导致角度计算错误例如90度会变成0度。输出范围[-π, π]弧度。典型连接直接输入一个方向向量的两个分量。例如将UV坐标、物体空间位置的xy分量、或者一个方向向量的y和x分量分别接入A和B。// 其背后的近似HLSL代码 float angle atan2(inputA, inputB); // inputA 是 y, inputB 是 x为什么Arctangent2更常用因为它解决了“全角度”问题。给定平面上的任意一点(x, y)原点除外atan2(y, x)都能给出从正X轴到该点的唯一、连续的角度值。这个特性使其成为将二维坐标转换为角度的标准工具。重要注意事项当输入(x, y) (0, 0)即位于原点时atan2(0, 0)在数学上是未定义的因为方向不明确。在Shader中不同的硬件或API可能返回不同的值通常是0或一个NaN。在实践中应尽量避免这种情况或者通过一个微小的偏移如加上一个极小的值1e-6来规避。4. 实战应用场景与案例拆解理解了原理接下来看它能做什么。反正切节点尤其是Arctangent2在Shader中的应用可以归纳为几个核心方向。4.1 场景一极坐标Polar Coordinates转换这是Arctangent2最经典的应用。极坐标用半径r和角度θ来描述平面上的点而笛卡尔坐标用的是(x, y)。角度 θ正是atan2(y, x)。半径 r是sqrt(x*x y*y)或length(float2(x, y))。实现步骤获取你的二维坐标通常是UV或物体空间位置的xz或xy分量。使用Arctangent2节点将坐标的y分量接A口x分量接B口输出即为角度θ弧度。使用Length节点计算该坐标向量的长度得到半径r。现在你得到了(r, θ)。你可以用θ来创建环形渐变、旋转扭曲、角度遮罩等效果。案例制作一个角度分区色盘// 假设在ShaderGraph中操作 1. UV坐标减去0.5使原点在纹理中心。 2. 将处理后的UV的y分量输入Arctangent2的Ax分量输入B得到角度Angle。 3. 将Angle从[-PI, PI]重映射到[0, 1]使用Remap节点。 4. 将这个[0,1]的值直接作为Hue色调输入给一个HSV转RGB的节点或使用Gradient Sample节点。 5. 输出颜色你会看到一个完美的色相环。通过调整重映射的范围你可以轻松控制色环的起始和结束角度。4.2 场景二基于方向的角度遮罩与扇形区域如果你想创建一个从某个中心点出发只在特定角度范围内显示的效果比如游戏中的技能扇形攻击范围指示器Arctangent2是核心。实现步骤计算像素位置相对于中心点的向量float2 dir pixelPos - centerPos;。使用Arctangent2计算dir向量的角度θ。定义你想要的扇形起始角startAngle和终止角endAngle注意单位统一都用弧度。使用比较和插值节点。一种常见方法是将角度θ与startAngle和endAngle比较。更优雅的方式是利用smoothstep函数在startAngle和endAngle边界处创建平滑过渡。注意处理角度环绕问题例如从350度跨越到10度的扇形。这通常需要对角度进行一些加减2π的周期处理或者将角度转换到[0, 2π]范围后再判断。4.3 场景三向量场可视化与流线生成在表现力、风场、魔法粒子流向等效果时我们常常有一个二维向量场每个点有一个(x, y)方向。直接显示向量箭头在像素着色器中不现实而将其转换为角度并用颜色表示则非常高效。实现步骤假设你有一个向量场数据可能是通过纹理采样如Flow Map或程序化噪声计算得到的float2向量。将该向量的y和x分量输入Arctangent2得到方向角。将角度值重映射到[0, 1]。将这个[0,1]的值作为查找表的索引去采样一个色环纹理Color Ramp或者直接驱动一个渐变色。输出颜色不同颜色代表不同方向直观地可视化了整个向量场。4.4 场景四高级菲涅尔效应与边缘检测变体标准的菲涅尔效应基于法线与视角方向的点积。但有时我们需要更复杂的、非径向对称的边缘高光。Arctangent2可以帮助我们引入角度依赖。思路将表面法线Normal或视角方向View Dir转换到切线空间Tangent Space。取其在切平面上的投影分量例如tangentSpaceNormal.xz或.xy。对这个二维向量使用Arctangent2计算其方位角。将这个角度值作为输入去调制菲涅尔效应的强度或颜色。例如你可以创建一个只在特定角度范围内如左右两侧加强的边缘光模拟各向异性的表面特性。5. 常见问题排查与性能优化技巧即使明白了原理在实际连接节点时还是会踩一些坑。下面是我总结的几个高频问题和解决思路。5.1 问题一角度输出是奇怪的条纹或非连续变化现象使用Arctangent2后本应平滑变化的角度在屏幕上显示为生硬的、有接缝的色带。原因这是角度不连续性的典型表现。Arctangent2的输出范围是[-π, π]。当角度从π约3.14跳变到-π约-3.14时虽然这两个值在几何上代表同一个方向都是指向左边但在数值上有一个约2π的突变。如果你直接将这个值映射到颜色就会在-π/π边界处看到一条明显的接缝。解决方案方案A通用在重映射到[0,1]之前先将角度值转换到[0, 2π]范围。// 在ShaderGraph中实现 float angle Arctangent2(y, x); // 范围 [-PI, PI] float angle_0_to_2PI angle / (2 * PI) 0.5; // 先映射到 [0,1] // 或者用条件判断if(angle 0) angle 2*PI;方案B用于渐变如果你是用角度来采样一个循环渐变如色环确保你的渐变纹理的Wrap Mode设置为Repeat并且其左右边缘的颜色是连续的。这样即使角度值有跳跃采样的颜色也会平滑衔接。5.2 问题二效果在中心点原点附近出现异常或闪烁现象当UV或坐标位于原点(0,0)时效果出现破碎、闪烁或全黑/全白。原因如前所述atan2(0,0)是未定义的。此外在原点附近极坐标的半径r接近0任何基于r的除法或归一化操作都可能导致数值溢出除以一个非常接近0的数。解决方案避免除零在计算任何可能用到半径倒数的地方比如归一化方向先对半径加上一个极小值。float2 dir uv - center; float radius length(dir); float safeRadius max(radius, 0.001); // 防止除零 float2 normalizedDir dir / safeRadius; // 安全归一化原点特殊处理如果效果在原点必须有一个定义可以增加一个判断。例如当半径小于某个阈值时直接输出一个默认颜色或角度值。5.3 问题三Arctangent和Arctangent2该用哪个我连反了端口顺序选择指南当你需要处理完整的360度方向信息时永远优先选择Arctangent2。比如从UV、位置或任意向量计算角度。只有当你明确处理的是一个标量比值并且你只关心它在-90°到90°之间的角度时例如处理某些对称函数的参数才考虑使用Arctangent。端口顺序确认 这是最容易出错的地方。一个简单的记忆方法是“先y后x”就像坐标系里(x, y)的书写顺序一样但函数是atan2(y, x)。在ShaderGraph中A端口是yB端口是x。快速验证方法创建一个简单的测试图。将常数(1, 0)输入Arctangent2A0 B1输出应该接近0指向正X轴。将(0, 1)输入A1 B0输出应该接近π/2约1.57指向正Y轴。如果结果不对说明端口接反了。5.4 性能考量与优化atan2是一个相对昂贵的数学函数虽然现代GPU上开销可以接受但在片元着色器中大量、频繁地调用仍需注意。预计算如果角度是基于静态或低频变化的数据如模型顶点位置尝试在顶点着色器中计算然后通过插值传递给片元着色器。简化近似在某些对精度要求不高的视觉特效中可以考虑使用更简单的函数来近似角度。例如如果你只需要一个粗略的、用于着色的角度分类或许用step或smoothstep对向量的x,y分量的符号进行组合判断就足够了。纹理查找替代对于极其复杂的、将(x,y)映射到角度的函数如果输入范围有限且固定可以预计算一张查找纹理Lookup Texture, LUT。在片元着色器中将(x,y)重映射为UV去采样这张LUT来获取角度值。这通常比实时计算atan2更快但会消耗额外的纹理采样和显存。6. 综合案例创建一个动态的雷达扫描Shader让我们用一个综合案例把上面的知识点串起来。目标是创建一个经典的雷达扫描效果一个圆形区域有一根从中心旋转发出的扫描线扫描线经过的地方高亮显示。ShaderGraph实现思路基础圆形遮罩使用UV计算到中心点的距离半径r用Smoothstep创建一个从中心到边缘的平滑圆形遮罩。计算扫描角度引入一个Time节点乘以一个速度系数得到一个持续增加的角度值scanAngle弧度。这是我们扫描线的当前角度。计算像素角度将UV偏移到中心得到向量dir。使用Arctangent2节点输入dir.y(A) 和dir.x(B)得到像素点相对于中心的角度pixelAngle。创建扫描线遮罩我们需要一个在scanAngle附近一个小范围内比如scanAngle ± width的角度区域是高亮的。直接比较pixelAngle和scanAngle会遇到角度环绕问题当scanAngle接近π而pixelAngle接近-π时。关键技巧计算角度差diff pixelAngle - scanAngle然后使用以下公式将其规范到[-π, π]区间// 在ShaderGraph中可以用Modulo节点和条件判断模拟但更简单的方法是 // diff mod(diff PI, 2*PI) - PI; // 但由于ShaderGraph没有直接的mod函数处理负数一个实用的方法是 diff diff - (2*PI) * floor((diff PI) / (2*PI));实际上对于这种扫描效果一个更简单粗暴且视觉可接受的方法是将pixelAngle和scanAngle都通过Remap转到[0, 1]然后利用Fraction节点处理Time的循环再比较它们的差值。如果差值在一个很小的阈值内比如0.01就视为在扫描线上。结合与输出将扫描线遮罩一个在扫描线处为1其他地方为0或平滑过渡的掩码与基础圆形遮罩相乘。用这个结果去混合两种颜色背景色和扫描高亮色。还可以将扫描线遮罩进行模糊或添加辉光例如用Power节点降低其衰减速度让扫描线有一个光晕尾巴。通过这个案例你不仅用到了Arctangent2来计算方向还实践了角度差计算、循环处理和遮罩混合等多个技巧。这正是Shader创作的魅力所在——将数学函数转化为直观的视觉动态。最后关于反正切节点我个人最深的体会是不要被它的数学名字吓倒。在ShaderGraph里它就是一个将二维向量“翻译”成角度读数的工具。绝大多数情况下你都是在用Arctangent2。下次当你在Shader中需要处理方向、旋转或创建环形图案时不妨先问问自己“这里是不是需要先把坐标转换成角度” 如果是那么Arctangent2节点就是你最得力的助手。多尝试多调试看着那些抽象的角度值如何一步步驱动出绚丽的视觉效果这个过程本身就是一种享受。

相关新闻

Godot引擎中基于Gerstner波与GPU着色器的实时海洋模拟实现

Godot引擎中基于Gerstner波与GPU着色器的实时海洋模拟实现

1. 项目概述:从像素到波涛的挑战在游戏和交互式体验中,一片能让人信服的海洋,其价值远超一个漂亮的静态背景。它关乎沉浸感,关乎氛围,甚至关乎玩法本身。然而,实时模拟海洋的动态表面,尤其是那种…

2026/8/6 6:57:06 阅读更多 →
视频合成7大核心技能:从剪辑基础到专业调色全流程解析

视频合成7大核心技能:从剪辑基础到专业调色全流程解析

1. 项目概述:视频合成技能全景解析最近在整理项目素材和制作个人作品集时,我深刻感受到,无论是做产品演示、内容创作还是活动回顾,把多个视频片段流畅地合成一个完整作品,已经成了一项绕不开的基础能力。这不仅仅是简单…

2026/8/6 6:57:06 阅读更多 →
5分钟用BehaviorDesigner为Unity游戏AI搭建巡逻与战斗行为树

5分钟用BehaviorDesigner为Unity游戏AI搭建巡逻与战斗行为树

1. 项目概述:为什么选择BehaviorDesigner?如果你正在开发一款带有NPC敌人的游戏,无论是RPG、FPS还是塔防,一个最基础的需求就是让敌人“动起来”,比如在固定路线上巡逻,发现玩家后追击并攻击。这个需求听起…

2026/8/6 6:57:06 阅读更多 →

最新新闻

SQLException 全链路排查:从连接失败到死锁的实战解决方案

SQLException 全链路排查:从连接失败到死锁的实战解决方案

1. 从“数据库连接失败”到“数据不一致”:一个SQLException的完整排查手册 干了这么多年后端开发,最怕半夜被报警电话吵醒,而十有八九,问题都出在数据库上,日志里躺着一个刺眼的 SQLException 。这玩意儿就像程序世…

2026/8/6 8:20:55 阅读更多 →
07 Vue 3 中的 TypeScript 基础

07 Vue 3 中的 TypeScript 基础

Vue 3 中的 TypeScript 基础 一、为什么 Vue 项目需要 TypeScript JavaScript 允许对象结构在运行时自由变化。项目较大后,常见问题包括: 接口字段拼写错误;函数参数传错类型;null 数据没有判断;重构字段后遗漏调用位置…

2026/8/6 8:20:55 阅读更多 →
基于Gemini 3.0的AI辅助PLC编程:从自然语言到工业控制代码的实践

基于Gemini 3.0的AI辅助PLC编程:从自然语言到工业控制代码的实践

1. 项目概述:当大模型遇上工业控制最近在工业自动化圈子里,一个话题讨论得挺热:能不能用现在火热的AI大模型,比如谷歌的Gemini,来搞点“自动化”的自动化?具体来说,就是开发一个App,…

2026/8/6 8:20:55 阅读更多 →
毕业之家AI深度测评:十分钟生成一篇合格论文,是噱头还是真本事?

毕业之家AI深度测评:十分钟生成一篇合格论文,是噱头还是真本事?

毕业之家AI深度测评:十分钟生成一篇合格论文,是噱头还是真本事? 对于正在为毕业论文焦头烂额的高校学子来说,从开题报告到最终答辩PPT,每一个环节都堪称“渡劫”。市面上所谓的“AI论文写作工具”层出不穷,…

2026/8/6 8:20:55 阅读更多 →
gitee:Hbuildex传项目到gitee

gitee:Hbuildex传项目到gitee

一、基础准备 1、Hbuildex打开项目 Hbuildex进入项目 2、新建终端 工具->安装插件->Git插件 3、安装TortoiseGit (1)下载 TortoiseGit – Windows Shell Interface to Git (2)安装 (3)汉化 下载 – TortoiseGit – Windows Shell Interface to Git 官网下载语言包…

2026/8/6 8:20:55 阅读更多 →
信通院报告国产第一,客户覆盖央行与招商银行:Gitee Team 企业级项目管理平台全维度拆解

信通院报告国产第一,客户覆盖央行与招商银行:Gitee Team 企业级项目管理平台全维度拆解

核心结论 Gitee Team 是开源中国旗下 Gitee DevSecOps 平台的核心项目管理模块,在中国信息通信研究院发布的《中国 DevOps 现状调查报告》中,以敏捷研发管理工具维度 30.38% 的团队选择占比位列国产工具第一。该平台已服务超过 42 万家企业客户&#xff…

2026/8/6 8:19:55 阅读更多 →

日新闻

深入解析LimboAI C++内核:架构设计与性能优化实战

深入解析LimboAI C++内核:架构设计与性能优化实战

1. 项目概述:为什么我们需要深入LimboAI的C内核?如果你是一名使用Godot引擎的游戏开发者,尤其是对AI行为逻辑有较高要求的项目,那么LimboAI这个名字你大概率不会陌生。它作为Godot 4生态中一个备受瞩目的行为树与状态机插件&#…

2026/8/6 0:00:06 阅读更多 →
Unity 2D游戏敌人AI系统:基于PlayMaker状态机与2D Toolkit的实战开发

Unity 2D游戏敌人AI系统:基于PlayMaker状态机与2D Toolkit的实战开发

1. 项目概述与核心思路大家好,我是老张,一个在游戏开发一线摸爬滚打了十多年的老码农。今天咱们接着聊《空洞骑士》风格2D动作游戏的Demo制作。上一期我们搭好了基础框架,处理了角色移动和碰撞,这一期,我们要让游戏世界…

2026/8/6 0:00:06 阅读更多 →
被动防火门市场前景发展趋势

被动防火门市场前景发展趋势

被动防火门依靠材质结构、密闭构造阻隔烟火蔓延,无需电控启动,是建筑被动消防系统核心构件,行业依托新规管控、城市更新、工业安全升级迎来稳定扩容,整体朝着合规化、专项化、低碳化、智能化方向发展。现阶段 GB12955‑2024 新版国…

2026/8/6 0:00:06 阅读更多 →

周新闻

最大流算法详解:从水管网络到Ford-Fulkerson与Dinic实战

最大流算法详解:从水管网络到Ford-Fulkerson与Dinic实战

1. 从水管网络到最大流:一个核心问题的诞生想象一下,你是一个城市供水系统的总工程师。你的城市有多个水源(水库),需要通过一个复杂的地下管道网络,将水输送到各个居民区。每条管道都有其最大通水能力&…

2026/8/5 15:00:43 阅读更多 →
基于Springboot的企业门户网站(源码+LW+调试文档+讲解)

基于Springboot的企业门户网站(源码+LW+调试文档+讲解)

温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台…

2026/8/5 13:13:56 阅读更多 →
MATLAB xcorr函数详解:从互相关原理到四大实战应用

MATLAB xcorr函数详解:从互相关原理到四大实战应用

1. 从一次信号“找茬”说起:为什么我们需要互相关几年前,我在处理一组声学传感器数据时遇到了一个棘手的问题。我有两个麦克风记录了一段相同的音频信号,理论上它们接收到的声音波形应该非常相似,只是由于麦克风位置不同&#xff…

2026/8/5 10:20:36 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/5 23:28:39 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/5 21:00:14 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/5 23:46:51 阅读更多 →