UnityShader学习笔记——动态效果
——内容源自唐老狮的shader课程
目录
1.原理
2.Shader中内置的时间变量
3.Shader中经常会改变的数据
4.纹理动画
4.1.背景滚动
4.1.1.补充知识
4.1.2.基本原理
4.2.帧动画
4.2.1.基本原理
5.流动的2D河流
5.1.基本原理
5.2.关键步骤
5.3.补充知识
6.广告牌效果
6.1.概念
6.2.基本原理
7.顶点动画注意事项
7.1.批处理
7.1.1.为什么批处理会影响顶点动画
7.1.2.关闭批处理的问题
7.1.3.如何解决问题
7.2.阴影
7.2.1.问题的产生
7.2.2.解决
8.如有疏漏,还请指出
1.原理
利用时间变化来改变数据,从而导致渲染结果改变,带来画面变化
2.Shader中内置的时间变量
1.float4 _TIme:四个分量分别是(t/20,t,2t,3t),t代表游戏场景从加载开始所经过的时间
2.float4 _SinTime:四个分量分别是(t/8,t/4,t/2,t),t代表游戏运行时间的正弦值
3.float4 _CosTime:四个分量分别是(t/8,t/4,t/2,t),t代表游戏运行时间的余弦值
4.float4 unity_DeltaTime:(dt,1/dt,smootDt,1/smootDt),dt代表帧间隔时间(上一帧到当前帧间隔时间),smootDt是平滑处理过的时间间隔,对帧间隔时间进行了某种平滑算法处理后得到的结果
3.Shader中经常会改变的数据
1.颜色:通过时间控制颜色的变化,如 渐变,闪烁 等
2.位置:利用时间使顶点在某个方向上移动,如 波动 等
3.纹理坐标:利用时间变化来改变纹理坐标,如 水流,云彩,序列帧动画 等
4.法线:利用时间动态修改法线方向,如 风吹草动 等
5.缩放:利用时间改变物体缩放比例,如 脉动,跳动 等
6.透明度:利用时间控制物体透明度,如 淡入淡出,闪烁 等
4.纹理动画
4.1.背景滚动
4.1.1.补充知识
frac(x):内部计算规则为frac(x) = 1 - floor(x),它能保留一个数的小数部分,负数保留的是小数部分+1的结果。它能保证uv坐标在0-1之间。
4.1.2.基本原理
不停地利用时间变量对uv坐标进行偏移运算,超过1的部分从0开始采样,小于1同理
Shader "Models_4/RollingBackground"
{Properties{_MainTex("Texture", 2D) = ""{}//控制流速_RollingSpeedU("RollingSpeedU", Float) = 1_RollingSpeedV("RollingSpeedV", Float) = 1}SubShader{Tags { "RenderType"="Transparent" "Queue" = "Transparent" "IgnoreProjector" = "True"}ZWrite OffBlend SrcAlpha OneMinusSrcAlphaPass{CGPROGRAM#pragma vertex vert#pragma fragment frag#include "UnityCG.cginc"sampler2D _MainTex;float _RollingSpeedU;float _RollingSpeedV;struct v2f{float2 uv : TEXCOORD0;float4 pos : SV_POSITION;};v2f vert (appdata_full v){v2f data;data.pos = UnityObjectToClipPos(v.vertex);data.uv = v.texcoord.xy;return data;}fixed4 frag (v2f f) : SV_Target{float2 uv = frac(float2(_Time.y * _RollingSpeedU, _Time.y * _RollingSpeedV) + f.uv);fixed4 backTex = tex2D(_MainTex, uv);return backTex;}ENDCG}}
}

4.2.帧动画
4.2.1.基本原理
通过_Time.y确认当前具体应该是哪一帧,然后算出在图中的几行几列,即确认采样范围,然后将采样范围缩放到 0-1 之间,但由于uv采样是从左下角开始,故采样范围要经过一点变化。
Shader "Models_4/SequenceFrame"
{Properties{_MainTex("MainTex", 2D) = ""{}//图集行列_Rows("Rows", Int) = 8_Columns("Columns", Int) = 8_SequenceFrameSpeed("SequenceFrameSpeed", Float) = 1}SubShader{Tags { "RenderType" = "Transparent" "IgnoreProjector" = "True" "Queue" = "Transparent" }ZWrite OffBlend SrcAlpha OneMinusSrcAlphaPass{Tags {}CGPROGRAM#include "UnityCG.cginc"#include "Lighting.cginc"#pragma vertex vert#pragma fragment fragsampler2D _MainTex;float _Rows;float _Columns;float _SequenceFrameSpeed;struct v2f{float4 pos : SV_POSITION;float2 uv : TEXCOORD0;};v2f vert(appdata_full v){v2f data;data.pos = UnityObjectToClipPos(v.vertex);data.uv = v.texcoord.xy;return data;}fixed4 frag(v2f f) : SV_TARGET{//当前帧的索引 float frameIndex = floor(_Time.y * _SequenceFrameSpeed) % (_Rows * _Columns);//图片采样起始位置的运算,除以对应的行和列的目的是 将其转换到0-1的坐标范围内//这里1 - ,是因为要把图片坐标系(左上为原点)转换为 uv坐标系(左下为原点)//+ 1 也差不多这个原因float2 frameUV = float2((frameIndex % _Columns) / _Columns, 1 - ((floor(frameIndex / _Columns) + 1) / _Rows));float2 size = float2(1 / _Columns, 1 / _Rows);//* size 相当于把0 - 1范围 缩放到了0 - 1/8的范围内//+ frameUV 是把起始的采样位置 移到了 对应帧(小格子)的起始采样位置float2 uv = f.uv * size + frameUV;fixed4 frameColor = tex2D(_MainTex, uv);return frameColor;}ENDCG}}
}

5.流动的2D河流
5.1.基本原理
让我们的顶点在对应的轴上产生偏移,主要运用的是Shader中的内置函数sin以及内置时间变量_Time.y
波浪感的关键因素:
1.波长: 其越大,波动越缓慢,周期越长
2.波长的倒数: 其越大,波动越频繁,周期越短
3.频率: 单位时间内波动发生的次数
4.幅度: 波峰或波谷相对于中线的最大偏移位置
5.2.关键步骤
1.让顶点上下动起来:让sin参与计算,如sin(_Time.y),可使其不断返回-1~1之间的值,而为了控制波动频率,可以用sin(_Time.y * 波动频率)
问题是所有顶点的偏移都一样,会出现整体移动的效果
2.让顶点有差异地动起来:以不同地坐标制造差异性,可以使用sin(_Time.y * 波动频率 + 顶点某轴的坐标),然后用得到的返回值作为顶点在某一轴向的偏移值,便可以让顶点有差异性的动起来
问题是无法体现波长和波动幅度(振幅,或者说幅度)
3.体现波长和幅度:使用
波动幅度 * sin(_Time.y * 波动频率 + 顶点某轴坐标 * 波长的倒数)
倒数越大,波形周期越短
具体轴向根据模型空间决定
5.3.补充知识
渲染标签DisableBatching:其作用是是否对SubShader关闭批处理,原因是我们在制作顶点动画的时候,有时需要使用模型空间下的数据,而批处理会合并所有相关的模型,这些模型各自的模型空间会丢失,导致我们无法正确使用模型空间下相关数据。在实现2d河流效果时,我们就需要让顶点在模型空间下进行偏移,因此需要使用该标签,为Shader关闭批处理。
同时,对于导入的模型资源,要观察其符不符合unity轴向标准(左右x,上下y,前后z)
Shader "Models_4/Water_2D"
{Properties{_MainTex("MainTex", 2D) = ""{}//类似漫反射颜色(大概)_Color("Color", Color) = (1, 1, 1, 1)//振幅_WaveAmplitude("WaveAmplitude", Float) = 1//波动频率_WaveFrequency("WaveFrequency", Float) = 1//波长的倒数_InvWaveLength("InvWaveLength", Float) = 1//纹理变化速度_Speed("Speed", Float) = 1}SubShader{Tags { "Queue" = "Transparent" "IgnorProjector" = "True" "RenderType" = "Transparent" "DisableBatching" = "True" }Pass{Tags { "LightMode" = "ForwardBase" }ZWrite OffBlend SrcAlpha OneMinusSrcAlphaCGPROGRAM#pragma vertex vert#pragma fragment frag#pragma multi_compile_fwdbase#include "UnityCG.cginc"#include "Lighting.cginc"#include "AutoLight.cginc"sampler2D _MainTex;float4 _MainTex_ST;float4 _Color;float _WaveAmplitude;float _WaveFrequency;float _InvWaveLength;float _Speed;struct v2f{float4 pos : SV_POSITION;float2 uv : TEXCOORD0;};v2f vert(appdata_full v){v2f data;float4 offset = float4(0, 0, 0, 0);//在世界空间下看,模型的x是y轴,我们要对模型的x轴进行改变,但不能直接改变世界空间下的y轴,因为世界空间下改变不会作用到模型空间下//直接改模型空间的点,并且对其原始状态上的轴做判断offset.x = _WaveAmplitude * sin(_WaveFrequency * _Time.y + v.vertex.z * _InvWaveLength);float4 vertex = v.vertex + offset;data.pos = UnityObjectToClipPos(vertex);data.uv = v.texcoord.xy * _MainTex_ST.xy + _MainTex_ST.zw;//让主纹理也动data.uv += float2(0, _Time.y * _Speed);return data;}fixed4 frag(v2f f) : SV_TARGET{//float2 uv = frac(f.uv + float2(0, _Time.y * _Speed));fixed4 mainColor = tex2D(_MainTex, f.uv) * _Color;return mainColor;}ENDCG}}
}

6.广告牌效果
6.1.概念
是一种图形技术,用于确保对象始终面对摄像机,同时在某些轴上保持固定的方向(一般分为全向广告牌和轴对齐广告牌)
全向广告牌:任何视角下,对象在所有轴上始终面向 摄像机
轴对齐广告牌:对象在一个轴上保持固定方向,而在其他轴上面向摄像机。其中垂直广告牌尤为特殊,他在水平面(XZ)平面上旋转,但在垂直方向上始终保持不变
6.2.基本原理
核心是旋转模型空间坐标系让其始终面向摄像机,故而需要构建一个基于模型空间的新坐标系。改坐标系有两个关键因素构成:
1.原点:基于模型空间的,可以自定义,但一般还是用000
2.三个轴向(x轴,y轴,z轴):通常情况下这仨由 右方向,垂直向上方向,视角方向 构成。
轴的计算:获得视角向量(新z轴)后,将其与 旧y轴(垂直向上的轴,(0, 1, 0))叉乘得到 右方向 轴(即 新x轴),然后将 视角方向 与 右方向 叉乘得到 新y轴。
最后,新顶点的位置如下:
偏移位置 = 顶点坐标 - Center
新顶点位置 = Center + X轴 * 偏移位置.x + Y轴 * 偏移位置.y + Z轴 * 偏移位置.z
垂直广告牌只需要在计算视角方向(新x轴)的时候,让该轴的y分量为0即可
Shader "Models_4/BillboardEffect"
{Properties{_MainTex("MainTex", 2D) = ""{}_Color("Color", Color) = (1, 1, 1, 1)_VerticalAmount("VerticalAmount", Range(0, 1)) = 0}SubShader{Tags { "Queue" = "Transparent" "RenderType" = "Transparent" "IgnoreProjector" = "True" "DisableBatching" = "True" }Pass{Tags { "LightMode" = "ForwardBase" }ZWrite OffBlend SrcAlpha OneMinusSrcAlphaCull OffCGPROGRAM#pragma vertex vert#pragma fragment frag#pragma multi_compile_fwdbase#include "UnityCG.cginc"sampler2D _MainTex;float4 _MainTex_ST;float4 _Color;float _VerticalAmount;struct v2f{float4 pos : SV_POSITION;float2 uv : TEXCOORD0;};v2f vert(appdata_full v){v2f data;float3 center = float3(0, 0, 0);float3 cameraInObjectPos = mul(unity_WorldToObject, float4(_WorldSpaceCameraPos, 1)); //zfloat3 normalDir = cameraInObjectPos - center;//全向或是垂直normalDir.y *= _VerticalAmount;normalDir = normalize(normalDir);float3 oldUpDir = normalDir.y > 0.999 ? float3(0, 0, 1) : float3(0, 1, 0);//float3 oldUpDir = float3(0, 1, 0);//x//xfloat3 rightDir = normalize(cross(oldUpDir, normalDir));//yfloat3 newUpDir = normalize(cross(normalDir, rightDir));float3 centerOffset = v.vertex.xyz - center;float3 newVertex = center + rightDir * centerOffset.x + newUpDir * centerOffset.y + normalDir * centerOffset.z;data.pos = UnityObjectToClipPos(newVertex);data.uv = v.texcoord.xy * _MainTex_ST.xy + _MainTex_ST.zw;return data;}fixed4 frag(v2f f) : SV_TARGET{fixed4 mainColor = tex2D(_MainTex, f.uv) * _Color;return mainColor;}ENDCG}}
}

7.顶点动画注意事项
7.1.批处理
7.1.1.为什么批处理会影响顶点动画
unity中默认有静态批处理和动态批处理,而批处理的主要作用是合并多个对象,将它们作为一个DrawCall来处理。之所以批处理会对顶点动画带来影响,是因为 不同的对象拥有不同的变换矩阵(平移,旋转,缩放)。而进行批处理之后,它们的变换矩阵将会进行统一处理,进而令其失去独立性。
举例子就是两个魔尺(颜色一样),分开各拼各的时候,你能分辨出它们各自的顶点(就当是每个三角衔接处),而如果把这俩魔尺合一块拼起来,那么某一个点究竟是哪把魔尺的就无法辨别了。
7.1.2.关闭批处理的问题
DrawCall的提升,进而导致性能的问题,而如果因为关闭批处理带来了性能问题,并且必须优化带有定点动画的Shader,该如何解决呢
7.1.3.如何解决问题
提前将独立的模型顶点存储起来:
1.通过c#代码存储到网格的颜色属性中:在Shader中通过颜色属性获取顶点信息。我们可以在appdata_full中点出color成员来使用这些顶点
private void SaveToMeshColor(){MeshFilter meshFilter = GetComponent<MeshFilter>();if (meshFilter != null){Mesh mesh = meshFilter.mesh;Vector3[] vertices = mesh.vertices;Color[] colors = new Color[vertices.Length];for (int i = 0; i < vertices.Length; i++){colors[i] = new Color(vertices[i].x, vertices[i].y, vertices[i].z, 1);}mesh.colors = colors;}}
2.通过c#代码存到uv中:与存储到color类似,但是一般只在存储两个值的时候使用。
7.2.阴影
7.2.1.问题的产生
顶点动画通过Fallback所产生的阴影是根据 没有变形过的顶点 来的,所以对于2d河流这种,直接使用Fallback产生的阴影会跟实际不符
7.2.2.解决
自己实现阴影,并在该Pass中及逆行顶点偏移的计算即可。无需进行裁剪空间坐标变换以及uv相关计算
Pass{Tags { "LightMode" = "ShadowCaster" }CGPROGRAM#pragma vertex vert#pragma fragment frag#pragma multi_compile_shadowcaster#include "UnityCG.cginc"float _WaveAmplitude;float _WaveFrequency;float _InvWaveLength;struct v2f{V2F_SHADOW_CASTER;};v2f vert(appdata_full v){v2f data;float4 offset = float4(0, 0, 0, 0);offset.x = _WaveAmplitude * sin(_WaveFrequency * _Time.y + v.vertex.z * _InvWaveLength);v.vertex += offset;//这个会自动调用v的数据TRANSFER_SHADOW_CASTER_NORMALOFFSET(data);return data;}fixed4 frag(v2f f) : SV_TARGET{SHADOW_CASTER_FRAGMENT(f);return fixed4(1, 1, 1, 1);}ENDCG}
8.如有疏漏,还请指出
相关文章:
UnityShader学习笔记——动态效果
——内容源自唐老狮的shader课程 目录 1.原理 2.Shader中内置的时间变量 3.Shader中经常会改变的数据 4.纹理动画 4.1.背景滚动 4.1.1.补充知识 4.1.2.基本原理 4.2.帧动画 4.2.1.基本原理 5.流动的2D河流 5.1.基本原理 5.2.关键步骤 5.3.补充知识 6.广告牌效果 …...
Docker Desktop安装到其他盘
Docker Desktop 默认安装到c盘,占用空间太大了,想给安装到其他盘,网上找了半天的都不对 正确安装命令: start /w "" "Docker Desktop Installer.exe" install --installation-dirF:\docker命令执行成功&am…...
详细教程 | 如何使用DolphinScheduler调度Flink实时任务
Apache DolphinScheduler 非常适用于实时数据处理场景,尤其是与 Apache Flink 的集成。DolphinScheduler 提供了丰富的功能,包括任务依赖管理、动态调度、实时监控和日志管理,能够有效简化 Flink 实时任务的管理和部署。通过 DolphinSchedule…...
稻盛和夫如何描述能力
1. 能力的三要素 稻盛和夫认为,能力由以下三个核心要素组成: 知识(Knowledge):掌握的专业知识、技术技能和行业经验。 技能(Skill):将知识应用于实际工作的能力,包括解决…...
【LeetCode 刷题】贪心算法(4)-区间问题
此博客为《代码随想录》二叉树章节的学习笔记,主要内容为贪心算法区间问题的相关题目解析。 文章目录 55. 跳跃游戏45. 跳跃游戏 II452. 用最少数量的箭引爆气球435. 无重叠区间763. 划分字母区间56. 合并区间 55. 跳跃游戏 题目链接 class Solution:def canJump…...
javaEE初阶————多线程初阶(3)
大家新年快乐呀,今天是第三期啦,大家前几期的内容掌握的怎么样啦? 1,线程死锁 1.1 构成死锁的场景 a)一个线程一把锁 这个在java中是不会发生的,因为我们之前讲的可重入机制,在其他语言中可…...
Deep Sleep 96小时:一场没有硝烟的科技保卫战
2025年1月28日凌晨3点,当大多数人还沉浸在梦乡时,一场没有硝烟的战争悄然打响。代号“Deep Sleep”的服务器突遭海量数据洪流冲击,警报声响彻机房,一场针对中国关键信息基础设施的网络攻击来势汹汹! 面对美国发起的这场…...
【AI应用】免费的文本转语音工具:微软 Edge TTS 和 开源版 ChatTTS 对比
【AI论文解读】【AI知识点】【AI小项目】【AI战略思考】【AI日记】【读书与思考】【AI应用】 我试用了下Edge TTS,感觉还不错,不过它不支持克隆声音(比如自己的声音) 微软 Edge TTS 和 开源版 ChatTTS 都是免费的 文本转语音&…...
Deepseek-v3 / Dify api接入飞书机器人go程序
准备工作 开通了接收消息权限的飞书机器人,例如我希望用户跟飞书机器人私聊,就需要开通这个权限:读取用户发给机器人的单聊消息 im:message.p2p_msg:readonly准备好飞书机器人的API key 和Secretdeepseek-v3的api keysecret:http…...
流媒体技术原理
流媒体技术的原理主要涉及以下几个核心概念和技术: 1. 编码和压缩 编码:视频和音频原始数据通常非常庞大。为了传输和存储,首先需要通过编码将这些数据转换成更小、更易处理的格式。常见视频编码标准包括H.264、H.265(HEVC&…...
matlab simulink 三级倒立摆LQR控制
1、内容简介 略 matlab simulink 122-三级倒立摆LQR控制 可以交流、咨询、答疑 2、内容说明 略 要求初始条件[0.01 0.01 0.01 0.01 0 0 0 0] 调节时间希望在3s内,超调量尽量的小,最大不能超过0.05; 用simulink的…...
使用令牌桶算法通过redis实现限流
令牌桶算法是一种常用的限流算法,它可以平滑地控制请求的处理速率。在 Java 中结合 Redis 实现令牌桶算法,可以利用 Redis 的原子操作来保证多节点环境下的限流效果。 一 实现思路 初始化令牌桶:在 Redis 中存储令牌桶的相关信息࿰…...
Tableau实用技巧 —— 提取Tableau文件中图片
需求背景 在日常开发过程中,我们时常会遇到两种图片提取需求:一是本地报告中的图片文件丢失需要找回,二是从网络论坛中发现有价值的报告图片希望保存使用。针对这些实际应用场景,以下将详细介绍有效的图片提取方法。 解决思路 …...
记一次golang环境的变化
前两天编译打包了了个文件,把env的 goos 搞坏了 导致运行项目一直报错 先是这样 go: unsupported GOOS/GOARCH pair windows/amd64再是这样 /amd64supported GOOS/GOARCH pair linux咱就说,咱也是知道环境配置的有问题 ( go env GOOS &…...
web直播弹幕抓取分析 signature
声明: 本文章中所有内容仅供学习交流使用,不用于其他任何目的,抓包内容、敏感网址、数据接口等均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关! 前言 最近遇到太多难点了卡了很久&am…...
CVE-2024-13025-Codezips 大学管理系统 faculty.php sql 注入分析及拓展
Codezips 里面有很多cms系统,其中的一个College Management System In PHP With Source Code存在sql注入漏洞。 复现 对源码进行下载登录。 里面有很多远程js加载不出来但是不影响接口使用。 对于/college-mgmt-php-master/Front-end/faculty.php接口进行测试。…...
第二个Qt开发实例:在Qt中利用GPIO子系统和sysfs伪文件系统实现按钮(Push Button)点击控制GPIO口(效果为LED2灯的灭和亮)
引言 本文承接博文 https://blog.csdn.net/wenhao_ir/article/details/145420998 里的代码,在那里面代码的基础上添加上利用sysfs伪文件系统实现按钮(Push Button)点击控制GPIO口的代码,进而实现LED2灯的灭和亮。 最终的效果是点击下面的LED按钮实现LED…...
【自动化测试】使用Python selenium类库模拟手人工操作网页
使用Python selenium类库模拟手人工操作网页 背景准备工作安装Python版本安装selenium类库下载selenium驱动配置本地环境变量 自动化脚本输出页面表单自动化填充相关代码 背景 待操作网页必须使用IE浏览器登录访问用户本地只有edge浏览器,通过edge浏览器IE模式访问…...
Elasticsearch:向量搜索的快速介绍
作者:来自 Elastic Valentin Crettaz 本文是三篇系列文章中的第一篇,将深入探讨向量搜索(也称为语义搜索)的复杂性,以及它在 Elasticsearch 中的实现方式。 本文是三篇系列文章中的第一篇,将深入探讨向量搜…...
低至3折,百度智能云千帆宣布全面支持DeepSeek-R1/V3调用
DeepSeek-R1和 DeepSeek-V3模型已在百度智能云千帆平台上架 。 出品|产业家 新年伊始,百度智能云又传来新动作 。 2月3日百度智能云宣布, DeepSeek-R1和 DeepSeek-V3模型已在百度智能云千帆平台上架,同步推出超低价格方案,并…...
VSCode中使用EmmyLua插件对Unity的tolua断点调试
一.VSCode中搜索安装EmmyLua插件 二.创建和编辑launch.json文件 初始的launch.json是这样的 手动编辑加上一段内容如下图所示: 三.启动调试模式,并选择附加的进程...
RabbitMQ 从入门到精通:从工作模式到集群部署实战(三)
文章目录 使用CLI管理RabbitMQrabbitmqctlrabbitmq-queuesrabbitmq-diagnosticsrabbitmq-pluginsrabbitmq-streamsrabbitmq-upgraderabbitmqadmin 使用CLI管理RabbitMQ RabbitMQ CLI 工具需要安装兼容的 Erlang/OTP版本。 这些工具假定系统区域设置为 UTF-8(例如en…...
2025软件授权与保护领域的新趋势
2024年对威步而言是一个重要的里程碑——公司成立35年以来,一直专注于软件安全及软件授权管理,以保护企业的数字资产与知识产权。展望2025年,数字资产盗窃、数据泄露与网络犯罪等威胁仍在持续增长,威步将在新的形势下继续推动技术…...
线段树(点修,区查,区修)
文章目录 什么是线段树?线段树能够解决什么样的问题?模板 什么是线段树? 线段树是一种二叉搜索树,而二叉搜索树,首先满足二叉树,即每个结点最多有两颗子树,并且是一颗搜索树,我们要知…...
深度学习 - 神经网络的原理
## 深度学习 - 神经网络的原理 深度学习是机器学习的一个分支,其核心是模拟人脑神经网络的结构和功能,构建多层的神经网络模型,从数据中学习特征并进行预测或分类。 **神经网络的基本原理:** 1. **神经元模型:** * 神经网…...
DeepSeek辅助段落扩写的能力怎么样?
DeepSeek-R1在学术写作的诸多细节层面展现出了显著的应用价值。接下来我们将通过一系列具体案例,深入探讨该工具如何在扩写、翻译、发表以及内容改进等关键环节为学术写作提供有力支持。在提问环节,DeepSeek-R1能够高效地简化提示词,并精准地…...
深入Linux系列之进程地址空间
深入Linux系列之进程地址空间 1.引入 那么在之前的学习中,我们知道我们创建一个子进程的话,我们可以在代码层面调用fork函数来创建我们的子进程,那么fork函数的返回值根据我们当前所处进程的上下文是返回不同的值,它在父进程中返…...
虚拟DOM与Diff算法:Vue如何高效更新UI?
虚拟DOM与Diff算法:Vue如何高效更新UI? 虚拟DOM与Diff算法:Vue如何高效更新UI?什么是虚拟DOM?定义虚拟DOM的优势 Diff算法:如何高效计算UI差异定义核心思想Diff算法的步骤示例代码 Vue中的虚拟DOM与Diff算法…...
Golang 并发机制-6:掌握优雅的错误处理艺术
并发编程可能是提高软件系统效率和响应能力的一种强有力的技术。它允许多个工作负载同时运行,充分利用现代多核cpu。然而,巨大的能力带来巨大的责任,良好的错误管理是并发编程的主要任务之一。 并发代码的复杂性 并发编程增加了顺序程序所不…...
【MySQL】第二弹---数据库基础全解析:从概念到实践的深度探索
✨个人主页: 熬夜学编程的小林 💗系列专栏: 【C语言详解】 【数据结构详解】【C详解】【Linux系统编程】【MySQL】 目录 1. 数据库基础 1.1 什么是数据库 1.2 主流数据库 1.3 基本使用 1.3.1 MySQL安装 1.3.2 连接服务器 1.3.3 服务器…...
c++计算机教程
目的 做出-*/%计算机 要求 做出可以计算-*/%的计算机 实现 完整代码 #include<bits/stdc.h> int main() {std::cout<<"加 减- 乘* 除/ 取余% \没有了|(因为可以算三位)"<<"\n"<<"提示:每打完一个符号或打完一个数,\…...
win32汇编环境,对话框程序中自定义工具栏的使用示例三
;运行效果 ;win32汇编环境,对话框程序中自定义工具栏的使用示例三 ;这次是竖着的,以下为生成48*48大小的自定义工具栏图标,自已设计图标样式,显得更专业点。 ;原理是,先生成工具栏控件,再生成图像列表,然后弄几个图标加入图像列表,再把图像列表与工具栏控件关联。需留意…...
集合类不安全问题
ArrayList不是线程安全类,在多线程同时写的情况下,会抛出java.util.ConcurrentModificationException异常 解决办法: 1.使用Vector(ArrayList所有方法加synchronized,太重) 2.使用Collections.synchronized…...
怎么使用Cursor以及升级Cursor pro会员
什么是cursor Cursor:结合AI技术的代码编辑器,助力开发者提升编码效率与质量。作为Visual Studio Code的一个衍生版本,Cursor继承了其用户熟知的界面和插件兼容性,并加入了革命性的AI特性。这款编辑器自2023年1月推出以来&#x…...
启用gui,启动图形化界面
1、停止服务 2、开启maxscale GUI ,修改主配置文件(增加框框内两行) 3、启动服务 注:如果出现以下启动不成功 考虑权限问题 4、访问http://ip:8989 用户名/密码:admin/mariadb...
03-移除元素
给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素。元素的顺序可能发生改变。然后返回 nums 中与 val 不同的元素的数量。 假设 nums 中不等于 val 的元素数量为 k,要通过此题,您需要执行以下操作: 更改…...
LSSVM最小二乘支持向量机多变量多步光伏功率预测(Matlab)
代码下载:LSSVM最小二乘支持向量机多变量多步光伏功率预测(Matlab) LSSVM最小二乘支持向量机多变量多步光伏功率预测 一、引言 1.1、研究背景与意义 随着全球能源危机和环境问题的日益严重,可再生能源的开发利用成为了世界各国…...
使用Vue开发可复用的Web Components:跨框架组件封装指南
使用Vue开发可复用的Web Components:跨框架组件封装指南 使用Vue开发可复用的Web Components:跨框架组件封装指南引言什么是Web Components?为什么选择Vue开发Web Components? 封装跨框架组件的步骤1. 创建基本的Vue组件2. 将Vue组…...
用AI写游戏1——js实现贪吃蛇
使用模型通义千问 提示词: 用js html css 做一个贪吃蛇的动画 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>Snake Game</title><link rel"stylesheet" href"c…...
星闪开发入门级教程之安装编译器与小项目烧录
系列文章目录 星闪开发入门级教程 好久不见,已经好几年没有发文章了,星闪-作为中国原生的新一代近距离无线联接技术品牌。我想着写点东西。为了适合新手,绝对小白文。 文章目录 系列文章目录前言一、Hispark Studio1.安装Hispark Studio2.安…...
java求职学习day32
JavaScript 详解 课程目标: 1 、 JavaScript 介绍 2 、 HTML 和 JavaScript 结合方式 3 、 JavaScript 的使用 4 、 DOM 操作 5 、 BOM 操作 1. JavaScript介绍 (1)虽然是 java 作为前缀,但 java 和 javascript 的关系,就像老婆和老婆…...
【Markdown语法】锚点机制:跳转任意位置
最近写文章时,发现有一个需求:想要实现一种点击跳转到文档中任意位置的功能,这就是锚点机制,就像游戏中的传送锚点,于是写成文章记录一下使用方式。 本文将详细介绍如何使用Markdown创建文档内部跳转(即锚…...
Docker安装pypiserver私服
Docker安装pypiserver私服 1 简介 Python开源包管理工具有pypiserver、devpi和Nexus等,pypiserver安装部署比较简单,性能也不错。 搭建pypiserver私服,可以自己构建镜像,也可以使用官网的docker镜像。 # Github地址 https://g…...
基于微信小程序的居住证申报系统设计与实现(LW+源码+讲解)
专注于大学生项目实战开发,讲解,毕业答疑辅导,欢迎高校老师/同行前辈交流合作✌。 技术范围:SpringBoot、Vue、SSM、HLMT、小程序、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容:…...
网站改HTTPS方法
默认的网站建设好后打开的样子那看起来像是钓鱼网站,现在的浏览器特别只能,就是你新买来的电脑默认的浏览器同样也会出现这样“不安全”提示。 传输协议启动了向全球用户安全传输网页内容的流程。然而,随着HTTPS的推出,传输协议通…...
什么是三层交换技术?与二层有什么区别?
什么是三层交换技术?让你的网络飞起来! 一. 什么是三层交换技术?二. 工作原理三. 优点四. 应用场景五. 总结 前言 点个免费的赞和关注,有错误的地方请指出,看个人主页有惊喜。 作者:神的孩子都在歌唱 大家好…...
极客说|利用 Azure AI Agent Service 创建自定义 VS Code Chat participant
作者:卢建晖 - 微软高级云技术布道师 「极客说」 是一档专注 AI 时代开发者分享的专栏,我们邀请来自微软以及技术社区专家,带来最前沿的技术干货与实践经验。在这里,您将看到深度教程、最佳实践和创新解决方案。关注「极客说」&a…...
Rust语言进阶之标准输入: stdin用法实例(一百零五)
简介: CSDN博客专家、《Android系统多媒体进阶实战》一书作者 新书发布:《Android系统多媒体进阶实战》🚀 优质专栏: Audio工程师进阶系列【原创干货持续更新中……】🚀 优质专栏: 多媒体系统工程师系列【…...
力扣刷题思路
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言递归70. 爬楼梯112. 路径总和509. 斐波那契数 分治169. 多数元素240.搜索二维矩阵 II --- 二分查找 单调栈 ---「找最近一个比当前值大/小」的问题739. 每日温度…...
MUX-VLAN实验
一、搭建实验拓扑图 二、基本设备配置 设备接口IP地址子网掩码网关PC1E0/0/110.0.1.1255.255.255.0N/APC2E0/0/110.0.1.2255.255.255.0N/APC3E0/0/110.0.1.3255.255.255.0N/APC4E0/0/110.0.1.4255.255.255.0N/APC5E0/0/110.0.1.6255.255.255.0N/Aserver-1E0/0/110.0.1.5255.2…...