[OpenGL] Lambertian材质漫反射BRDF方程的解释与推导
一、简介
本文简单的介绍了 Physical Based Rendering, PBR 中的 Lambertian 材质漫反射BRDF公式 f r l a m b e r t i a n = c d i f f π fr_{lambertian}=\frac{c_{diff}}{\pi} frlambertian=πcdiff的推导。
二、漫反射项
根据 渲染方程:
L o ( v ) = ∫ Ω f r ( l , v ) L i ( l ) ∗ ( n ⋅ l ) d l (1) Lo(v) = \int_{\Omega}fr(l,v)Li(l)*(n\cdot l) dl \tag{1} Lo(v)=∫Ωfr(l,v)Li(l)∗(n⋅l)dl(1)
其中的 BRDF 函数 f r ( l , v ) fr(l,v) fr(l,v) 定义如下:
f r ( l , v ) = k d ∗ f r l a m b e r t ( l , v ) + k s ∗ f r s p e c u l a r ( l , v ) (2) fr(l,v) = k_d * fr_{lambert}(l,v) + k_s*fr_{specular}(l,v)\tag{2} fr(l,v)=kd∗frlambert(l,v)+ks∗frspecular(l,v)(2)
其中 k d k_d kd 为漫反射的比例, f r l a m b e r t fr_{lambert} frlambert为漫反射中的 BRDF 函数定义如下:
f r l a m b e r t = c d i f f π (3) fr_{lambert} = \frac{c_{diff}}{\pi} \tag{3} frlambert=πcdiff(3)
其中 c d i f f c_{diff} cdiff 为描述材质属性的漫反射颜⾊(diffuse) c d i f f c_{diff} cdiff ,或者反照率(albedo) ρ \rho ρ。本文接下来介绍什么是 Lambertian 表面,为什么 Lambertian 材质的漫反射BRDF 公式如公式(3) 所示。
1. Lambert 表面
Lambertian 材质是指那种理想的完全漫反射表面,从任何观察方向看去,它反射的亮度都是一致的。即,不论外界的光照如何,Lambertian 材质满足以下公式:
L o ( v ) = ∫ Ω f r l a m b e r t i a n ( l , v ) ( n ⋅ l ) d l = L o c (4) Lo(v) = \int_{\Omega}fr_{lambertian}(l,v)(n\cdot l)\ dl = Lo_{c} \tag{4} Lo(v)=∫Ωfrlambertian(l,v)(n⋅l) dl=Loc(4)
不管视线向量 v v v 如何变化(需要保证在材质的上半球内),其出射的 radiance L o ( v ) Lo(v) Lo(v) 恒等于定值 L o c Lo_{c} Loc。
2. 漫反射公式解释
2.1 反照率 albedo
Lambertian BRDF 的恒定反射率通常被称为漫反射颜⾊(diffuse) c d i f f c_{diff} cdiff ,或者反照率(albedo) ρ \rho ρ。反照率 ρ \rho ρ描述了目标表面反射的辐射通量 Φ o u t \Phi_{out} Φout与入射的辐射通量 Φ i n \Phi_{in} Φin 之比。定义如下:
c d i f f = ρ = Φ o u t Φ i n (5) c_{diff} = \rho = \frac{\Phi_{out}}{\Phi_{in}} \tag{5} cdiff=ρ=ΦinΦout(5)
2.2 能量守恒定律
根据能量守恒定理定律,应该有:
c d i f f = ρ = Φ o u t Φ i n ≤ 1.0 (6) c_{diff} = \rho = \frac{\Phi_{out}}{\Phi_{in}} \le 1.0 \tag{6} cdiff=ρ=ΦinΦout≤1.0(6)
2.3 漫反射 BRDF 函数推导
接下来我们将基于以下假设和定义,推导得到 漫反射 BRDF 的渲染公式(3)。
2.3.1 已知信息
- 漫反射BRDF满足渲染方程: L o ( v ) = ∫ f r l a m b e r t i a n ( l , v ) ∗ L i ( l ) ∗ ( n ⋅ l ) d l Lo(v)=\int{fr_{lambertian}(l,v)*Li(l)*(n\cdot l)\ dl} Lo(v)=∫frlambertian(l,v)∗Li(l)∗(n⋅l) dl。
- 对于 Lambertian 材质, f r l a m b e r t i a n ( l , v ) fr_{lambertian}(l,v) frlambertian(l,v) 与 v v v 和 l l l 无关,即 f r l a m b e r t i a n ( l , v ) fr_{lambertian}(l,v) frlambertian(l,v) 是定值 f r c fr_{c} frc 。那么根据渲染方程,不管如何光照 L i ( l ) Li(l) Li(l) 如何分布,任意出射方向的 L o ( v ) Lo(v) Lo(v) 也都相等。
- 对于 Lambertian 材质,假设其没有自发光,满足能量守恒定理,即: c d i f f = ρ = Φ o u t Φ i n ≤ 1.0 c_{diff} = \rho = \frac{\Phi_{out}}{\Phi_{in}} \le 1.0 cdiff=ρ=ΦinΦout≤1.0。
- 目标表面的入射/出射辐射通量/功率(Radiant flux/Power) Φ i n \Phi_{in} Φin、 Φ o u t \Phi_{out} Φout 的计算公式如下:
Φ i n t = ∫ Ω L i ( l ) ∗ ( n ⋅ l ) d l d A Φ o u t = ∫ Ω L o ( v ) ∗ ( n ⋅ v ) d v d A \Phi_{int} = \int_{\Omega} Li(l)*(n\cdot l) dl\ dA \\ \Phi_{out} = \int_{\Omega} Lo(v)*(n\cdot v) dv\ dA Φint=∫ΩLi(l)∗(n⋅l)dl dAΦout=∫ΩLo(v)∗(n⋅v)dv dA - 假设目标表面为 Lambertian 材质,即只有漫反射,没有镜面反射也没有自发光。
- 假设目标表面的面积为 A A A。
- 假设目标表面的漫反射颜色(反照率)为 c d i f f c_{diff} cdiff,即 c d i f f = Φ o u t Φ i n c_{diff} = \frac{\Phi_{out}}{\Phi_{in}} cdiff=ΦinΦout。
接下来本文将根据以上已知信息推导目标 BRDF 函数 f r l a m b e r t i a n ( l , v ) = f r c = ? fr_{lambertian}(l,v)=fr_{c}=? frlambertian(l,v)=frc=?:
2.3.2 推导过程
根据辐射通量/功率(Radiant flux/Power) Φ \Phi Φ 的计算公式
Φ = ∫ Ω L ( w ) ∗ ( n ⋅ w ) d w d A \Phi = \int_{\Omega} L(w)*(n\cdot w) dw\ dA Φ=∫ΩL(w)∗(n⋅w)dw dA
可以得到目标表面的总出射辐射通量 Φ o u t \Phi_{out} Φout 为
Φ o u t = ∫ Ω L o ( v ) ∗ ( n ⋅ v ) d v d A = ∫ 0 2 π ∫ 0 π / 2 L o ( v ) ∗ c o s ( θ ) ∗ s i n ( θ ) d θ d ϕ d A \Phi_{out} = \int_{\Omega} Lo(v)*(n\cdot v) dv\ dA \\ = \int_{0}^{2\pi} \int_{0}^{\pi/2} Lo(v)*cos(\theta)*sin(\theta) d{\theta}d{\phi}\ dA Φout=∫ΩLo(v)∗(n⋅v)dv dA=∫02π∫0π/2Lo(v)∗cos(θ)∗sin(θ)dθdϕ dA
又因为对于 Lambertian 材质,任意出射方向的 L o ( v ) Lo(v) Lo(v) 都相等,并且目标表面的面积为 A A A,因此有:
Φ o u t = ∫ 0 2 π ∫ 0 π / 2 L o ( v ) ∗ c o s ( θ ) ∗ s i n ( θ ) d θ d ϕ d A = ∫ 0 2 π ∫ 0 π / 2 L o c ∗ c o s ( θ ) ∗ s i n ( θ ) d θ d ϕ d A = L o c ∗ ∫ 0 2 π ∫ 0 π / 2 c o s ( θ ) ∗ s i n ( θ ) d θ d ϕ ∗ A = L o c ∗ π ∗ A (7) \Phi_{out} = \int_{0}^{2\pi} \int_{0}^{\pi/2} Lo(v)*cos(\theta)*sin(\theta)\ d{\theta}d{\phi}\ dA \\ = \int_{0}^{2\pi} \int_{0}^{\pi/2} Lo_{c}*cos(\theta)*sin(\theta)\ d{\theta}\ d{\phi}\ dA \\ = Lo_{c} * \int_{0}^{2\pi} \int_{0}^{\pi/2} cos(\theta)*sin(\theta)\ d{\theta}\ d{\phi}\ * A \\ = Lo_{c}*\pi*A \tag{7} Φout=∫02π∫0π/2Lo(v)∗cos(θ)∗sin(θ) dθdϕ dA=∫02π∫0π/2Loc∗cos(θ)∗sin(θ) dθ dϕ dA=Loc∗∫02π∫0π/2cos(θ)∗sin(θ) dθ dϕ ∗A=Loc∗π∗A(7)
那么
L o c = Φ o u t π ∗ A (8) Lo_{c} = \frac{\Phi_{out}}{\pi*A} \tag{8} Loc=π∗AΦout(8)
同理可以得到目标表面的总入射辐射通量 Φ i n \Phi_{in} Φin为:
Φ i n = ∫ Ω L i ( l ) ∗ ( n ⋅ l ) d l d A = ∫ Ω L i ( l ) ∗ ( n ⋅ l ) d l ∗ A (9) \Phi_{in} = \int_{\Omega} Li(l)*(n\cdot l)\ dl\ dA \\ = \int_{\Omega} Li(l)*(n\cdot l)\ dl * A \tag{9} Φin=∫ΩLi(l)∗(n⋅l) dl dA=∫ΩLi(l)∗(n⋅l) dl∗A(9)
那么就有:
Φ i n A = ∫ Ω L i ( l ) ∗ ( n ⋅ l ) d l (10) \frac{\Phi_{in}}{A} = \int_{\Omega} Li(l)*(n\cdot l)\ dl \tag{10} AΦin=∫ΩLi(l)∗(n⋅l) dl(10)
根据渲染方程,我们可以得到:
L o c = L o ( v ) = ∫ Ω f r l a m b e r t i a n ( l , v ) ∗ L i ( l ) ∗ ( n ⋅ l ) d l Lo_{c} = Lo(v) = \int_{\Omega} fr_{lambertian}(l,v)*Li(l)*(n\cdot l)\ dl Loc=Lo(v)=∫Ωfrlambertian(l,v)∗Li(l)∗(n⋅l) dl
因为 f r l a m b e r t i a n ( l , v ) fr_{lambertian}(l,v) frlambertian(l,v) 为定值 f r c fr_{c} frc ,那么就有:
L o c = L o ( v ) = ∫ Ω f r l a m b e r t i a n ( l , v ) ∗ L i ( l ) ∗ ( n ⋅ l ) d l = f r c ∗ ∫ Ω L i ( l ) ∗ ( n ⋅ l ) d l (11) Lo_{c} = Lo(v) = \int_{\Omega} fr_{lambertian}(l,v)*Li(l)*(n\cdot l)\ dl \\ = fr_c * \int_{\Omega} Li(l)*(n\cdot l)\ dl \tag{11} Loc=Lo(v)=∫Ωfrlambertian(l,v)∗Li(l)∗(n⋅l) dl=frc∗∫ΩLi(l)∗(n⋅l) dl(11)
将公式(10)代入公式(11)可以得到:
L o c = L o ( v ) = f r c ∗ ∫ Ω L i ( l ) ∗ ( n ⋅ l ) d l = f r c ∗ Φ i n A (12) Lo_{c} = Lo(v) = fr_c * \int_{\Omega} Li(l)*(n\cdot l)\ dl \\ = fr_c * \frac{\Phi_{in}}{A} \tag{12} Loc=Lo(v)=frc∗∫ΩLi(l)∗(n⋅l) dl=frc∗AΦin(12)
又因为根据公式(8), L o c = Φ o u t / ( π ∗ A ) Lo_{c} = \Phi_{out}/{(\pi*A)} Loc=Φout/(π∗A),那么
L o c = f r c ∗ Φ i n A = Φ o u t π ∗ A (13) Lo_c = fr_c * \frac{\Phi_{in}}{A} = \frac{\Phi_{out}}{\pi*A} \tag{13} Loc=frc∗AΦin=π∗AΦout(13)
又因为 c d i f f = Φ o u t / Φ i n c_{diff} = \Phi_{out}/\Phi_{in} cdiff=Φout/Φin,那么可以得到:
f r c = Φ o u t π ∗ Φ i n = c d i f f π (14) fr_c = \frac{\Phi_{out}}{\pi*\Phi_{in}} = \frac{c_{diff}}{\pi} \tag{14} frc=π∗ΦinΦout=πcdiff(14)
即:
f r L a m b e r t i a n ( l , v ) = f r c = Φ o u t π ∗ Φ i n = c d i f f π (14) fr_{Lambertian}(l,v) = fr_c = \frac{\Phi_{out}}{\pi*\Phi_{in}} = \frac{c_{diff}}{\pi} \tag{14} frLambertian(l,v)=frc=π∗ΦinΦout=πcdiff(14)
至此,我们得到了 Lambertian 材质的 漫反射 BRDF 公式 f r l a m b e r t i a n ( l , v ) = c d i f f π fr_{lambertian}(l,v)=\frac{c_{diff}}{\pi} frlambertian(l,v)=πcdiff.
三、参考引用
[1].Real-Time Rendering, 4th Edition-Chapter 9 Physically Based Shading
[2].Background: Physics and Math of Shading
相关文章:
[OpenGL] Lambertian材质漫反射BRDF方程的解释与推导
一、简介 本文简单的介绍了 Physical Based Rendering, PBR 中的 Lambertian 材质漫反射BRDF公式 f r l a m b e r t i a n c d i f f π fr_{lambertian}\frac{c_{diff}}{\pi} frlambertianπcdiff的推导。 二、漫反射项 根据 渲染方程: L o ( v ) ∫ …...
网易云音乐如何修改缓存地址到D盘
你可以通过创建 符号链接(Symbolic Link) 将网易云音乐的缓存目录转移到D盘,无需修改软件设置。以下是具体步骤: 操作步骤 关闭网易云音乐 确保程序完全退出(任务栏右下角无残留进程)。 备份并移动原缓存文…...
react使用01
React.cloneElement(element,props,…children) 这个是React的官方API,,主要用于克隆并修改React元素,, 本质: 复制一个已有的React元素,并允许你修改他的props element : 必须是一个有效的element元素p…...
yooAsset打包后材质丢失
以安卓为目标平台打出的AssetBundle包(尤其是YooAsset打出的),在Window下Unity编辑器以HostPlayMode运行,有时显示会丢失部分材质。 这是因为安卓目标的AssetBundle包适合OpenglES,而window下Unity编辑器模式是Dx11&a…...
Codeforces Round 1019 (Div. 2)
A. Common Multiple 找不同的数字 #include<iostream> #include<vector> #include<algorithm> using namespace std; int main() {int t; cin >> t;while (t--) {int n;cin >> n;vector<int> a(n);for (int i 0; i < n; i)cin >&…...
【Spring Boot】MyBatis多表查询的操作:注解和XML实现SQL语句
1.准备工作 1.1创建数据库 (1)创建数据库: CREATE DATABASE mybatis_test DEFAULT CHARACTER SET utf8mb4;(2)使用数据库 -- 使⽤数据数据 USE mybatis_test;1.2 创建用户表和实体类 创建用户表 -- 创建表[⽤⼾表…...
Docker离线安装与配置指南
Docker离线安装与配置指南 离线安装步骤 1. 下载离线安装包 官方下载地址: https://download.docker.com/linux/static/stable/x86_64/注意:国内用户若无法访问,可能需要使用科学上网工具。本文档以Docker 20.10.23版本为例。 2. 安装与部…...
N8N 官方 MCP 节点实战指南:AI 驱动下的多工具协同应用场景全解析
在低代码自动化领域,N8N 凭借其强大的节点扩展能力和灵活的工作流编排,成为企业构建复杂自动化流程的首选工具。随着 AI Agent 技术的兴起,通过 MCP(Multi-Tool Coordination Protocol)实现 AI 与外部工具的协同调用&a…...
v-html 显示富文本内容
返回数据格式: 只有图片名称 显示不出完整路径 解决方法:在接收数据后手动给img格式的拼接vite.config中的服务器地址 页面: <el-button click"">获取信息<el-button><!-- 弹出层 --> <el-dialog v-model&…...
UWB与GPS技术融合的室内外无缝定位方案
一、技术原理与互补性 双模定位机制 室外场景:GPS/北斗提供10-30厘米级定位精度(RTK技术辅助),覆盖露天区域。室内场景:UWB通过TOF/TDOA算法实现10-50厘米级定位精度,穿透金…...
AiEditor v1.3.8 发布
2025 年 4 月 22 日,AI 富文本编辑器 AiEditor 发布了 v1.3.8 版本。 AiEditor 是一个面向 AI 的下一代富文本编辑器,基于 Web Component 开发,支持 Layui、Vue、React、Angular 等几乎任何前端框架,适配 PC Web 端和手机端&#…...
从零学会epoll的使用和原理
从零学会epoll的使用和原理 第一步:理解 select / poll 的缺陷 一、select 和 poll 是什么? 它们是 Linux 提供的 I/O 多路复用机制,可以让我们同时监听多个文件描述符(fd),比如 socket,来等…...
XHTMLConverter把docx转换html报java.lang.NullPointerException异常
一.报错 1.报错信息 org.apache.poi.xwpf.converter.core.XWPFConverterException: java.lang.NullPointerExceptionat org.apache.poi.xwpf.converter.xhtml.XHTMLConverter.convert(XHTMLConverter.java:77)at org.apache.poi.xwpf.converter.xhtml.XHTMLConverter.doConve…...
教育科技质检的三重挑战 质检LIMS系统在教育技术研发的应用
在教育技术研发领域,实验室作为产品验证的核心环节,其质检效率与数据安全性直接关乎企业的创新竞争力。LIMS(实验室信息管理系统)作为贯穿检测全流程的数字化中枢,正在成为教育科技企业的"质量守护者"。本文…...
MySQL最左前缀原则深度解析:优化索引设计的核心法则
一、什么是最左前缀原则? 最左前缀原则(Leftmost Prefix Principle) 指在使用复合索引(Composite Index)时,MySQL会按照索引定义的列顺序,从左到右匹配查询条件。只有连续且从最左侧开始的列组…...
多模态大语言模型arxiv论文略读(三十五)
On the Out-Of-Distribution Generalization of Multimodal Large Language Models ➡️ 论文标题:On the Out-Of-Distribution Generalization of Multimodal Large Language Models ➡️ 论文作者:Xingxuan Zhang, Jiansheng Li, Wenjing Chu, Junjia…...
Linux 安装pm2并全局可用
前言 本文基于:操作系统 CentOS Stream 8 使用工具:Xshell8、Xftp8 服务器基础环境: node - 请查看 Linux安装node并全局可用 所需服务器基础环境,请根据提示进行下载、安装。 1.安装依赖 npm install pm2 -g2.配置全局软链…...
39.剖析无处不在的数据结构
数据结构是计算机中组织和存储数据的特定方式,它的目的是方便且高效地对数据进行访问和修改。数据结构表述了数据之间的关系,以及操作数据的一系列方法。数据又是程序的基本单元,因此无论是哪种语言、哪种领域,都离不开数据结构&a…...
基于 Vue 的Tiptap 富文本编辑器使用指南
目录 🧰 技术栈 📦 所需依赖 📁 文件结构 🧱 编辑器组件实现(components/Editor.vue) ✨ 常用操作指令 🧠 小贴士 🧩 Tiptap 扩展功能使用说明(含快捷键与命令&am…...
【音视频】AAC-ADTS分析
AAC-ADTS 格式分析 AAC⾳频格式:Advanced Audio Coding(⾼级⾳频解码),是⼀种由MPEG-4标准定义的有损⾳频压缩格式,由Fraunhofer发展,Dolby, Sony和AT&T是主 要的贡献者。 ADIF:Audio Data Interchange Format ⾳…...
vue中将elementUI和echarts转成pdf文件
若要将包含 ElementUI 组件数据和多个 ECharts 图表的数据转换为 PDF 文档,可结合 html2canvas、jspdf 以及 dom-to-image 来实现。其中,html2canvas 和 dom-to-image 可将 ECharts 图表转换为图片,jspdf 则用于生成 PDF 文档。对于 ElementU…...
基于 Electron、Vue3 和 TypeScript 的辅助创作工具全链路开发方案:涵盖画布系统到数据持久化的完整实现
基于 Electron、Vue3 和 TypeScript 的辅助创作工具全链路开发方案:涵盖画布系统到数据持久化的完整实现 引言 在数字内容创作领域,高效的辅助工具是连接创意与实现的关键桥梁。创作者需要一款集可视化画布、节点关系管理、数据持久化于一体的专业工具&…...
本地部署DeepSeek-R1模型接入PyCharm
以下是DeepSeek-R1本地部署及接入PyCharm的详细步骤指南,整合了视频内容及官方文档核心要点: 一、本地部署DeepSeek-R1模型 1. 安装Ollama框架 下载安装包 访问Ollama官网(https://ollama.com/download)或通过视频提供的百度云盘链接下载对应系统的安装包。Windows用户…...
基于LightGBM-TPE算法对交通事故严重程度的分析与可视化
基于LightGBM-TPE算法对交通事故严重程度的分析与可视化 原文: Analysis and visualization of accidents severity based on LightGBM-TPE 1. 引言部分 文章开篇强调了道路交通事故作为意外死亡的主要原因,引起了多学科领域的关注。分析事故严重性特…...
音视频小白系统入门课-3
本系列笔记为博主学习李超老师课程的课堂笔记,仅供参阅 往期课程笔记传送门: 音视频小白系统入门笔记-0音视频小白系统入门笔记-1音视频小白系统入门笔记-2 视频: 由一组图像组成:像素、分辨率、RGB 8888(24位) 、RGBA(32位)为…...
考研系列-计算机网络-第五章、传输层
一、传输层提供的服务 1.重点知识...
将Ubuntu系统中已有的Python环境迁移到Anaconda的虚拟环境中
需求:关于如何将Ubuntu系统中已有的Python环境迁移到Anaconda的虚拟环境test2里,而且他们提到用requirements.txt 安装一直报错,所以想尝试直接拷贝的方法。 可以尝试通过直接拷贝移植的方式迁移Python环境到Anaconda虚拟环境,但…...
AI 数字短视频数字人源码开发:多维赋能短视频生态革新
在短视频行业深度发展的进程中,AI 数字短视频数字人源码开发凭借其独特的技术优势,从多个维度为行业生态带来了革命性的变化,重塑短视频创作、传播与应用的格局。 数据驱动,实现内容精准化创作 AI 数字短视频数字人源码开发能够深…...
ffmpeg 硬解码相关知识
一:FFMPEG 支持的硬解方式:如下都是了解知识 DXVA2 - windows DXVA2 硬件加速技术解析 一、核心特性与适用场景 技术定义:DXVA2(DirectX Video Acceleration 2)是微软推出的基于 DirectX 的硬件加速标准…...
Ubuntu数据连接访问崩溃问题
目录 一、分析问题 1、崩溃问题本地调试gdb调试: 二、解决问题 1. 停止 MySQL 服务 2. 卸载 MySQL 相关包 3. 删除 MySQL 数据目录 4. 清理依赖和缓存 5.重新安装mysql数据库 6.创建程序需要的数据库 三、验证 1、动态库更新了 2、头文件更新了 3、重新…...
边缘计算全透视:架构、应用与未来图景
边缘计算全透视:架构、应用与未来图景 一、产生背景二、本质三、特点(一)位置靠近数据源(二)分布式架构(三)实时性要求高 四、关键技术(一)硬件技术(二&#…...
迅为iTOP-RK3576开发板/核心板6TOPS超强算力NPU适用于ARM PC、边缘计算、个人移动互联网设备及其他多媒体产品
迅为iTOP-3576开发板采用瑞芯微RK3576高性能、低功耗的应用处理芯片,集成了4个Cortex-A72和4个Cortex-A53核心,以及独立的NEON协处理器。它适用于ARM PC、边缘计算、个人移动互联网设备及其他多媒体产品。 支持INT4/INT8/INT16/FP16/BF16/TF32混合运算&a…...
前沿分享|技术雷达202504月刊精华
本期雷达 ###技术部分 7. GraphRAG 试验 在上次关于 检索增强生成(RAG)的更新中,我们已经介绍了GraphRAG。它最初在微软的文章中被描述为一个两步的流程: (1)对文档进行分块,并使用基于大语言…...
[创业之路-380]:企业法务 - 企业经营中,企业为什么会虚开増值税发票?哪些是虚开増值税发票的行为?示例?风险?
一、动机与风险 1、企业虚开增值税发票的动机 利益驱动 骗抵税款:通过虚开发票虚增进项税额,减少应纳税额,降低税负。公司套取国家的利益。非法套现:虚构交易开具发票,将资金从公司账户转移至个人账户,用…...
嵌入式:ARM公司发展史与核心技术演进
一、发展历程:从Acorn到全球算力基石 1. 起源(1978-1990) 1978年:奥地利物理学家Hermann Hauser与工程师Chris Curry创立剑桥处理器公司(CPU Ltd.),后更名为**艾康电脑(Acor…...
ubuntu的各种工具配置
1.nfs:虚拟机桥接模式下,开发板和虚拟机保持在同一网段下,开发板不要直连电脑 挂载命令:mount -v -t nfs 192.168.110.154:/home/lhj /mnt -o nolock (1) 安装 NFS 服务器 sudo apt update sudo apt install nfs-kernel-server -y…...
Go 剥离 HTML 标签的三把「瑞士军刀」——从正则到 Bluemonday
1 为什么要「剥皮」? 安全:去掉潜在的 <script onload…> 等恶意标签,防止存储型 XSS。可读性:日志、消息队列、搜索索引里往往只需要纯文本。一致性:不同富文本编辑器生成的 HTML 五花八门,统一成「…...
【Java面试笔记:基础】6.动态代理是基于什么原理?
1. 反射机制 定义:反射是 Java 语言提供的一种基础功能,允许程序在运行时自省(introspect),直接操作类或对象。功能: 获取类定义、属性和方法。调用方法或构造对象。运行时修改类定义。 应用场景ÿ…...
docker容器中uv的使用
文章目录 TL;DRuv简介uv管理项目依赖step 1step 2WindowsLinux/Mac step 3依赖包恢复 在Docker容器中使用uv TL;DR 本文记录uv在docker容器中使用注意点, uv简介 uv是用rust编写的一个python包管理器,特点是速度快,且功能强大,目标是替代p…...
分部积分选取u、v的核心是什么?
分部积分选取u、v的核心是什么?是反对幂指三吗? 不全是,其实核心是:v要比u更容易积分,也就是更容易求得原函数,来看一道例题:...
Android Studio调试中的坑二
下载新的Android studio Meerkat后,打开发现始终无法更新对应的SDK,连Android 15的SDK也无法在SDK Manger中显示出来,但是Meerkat必须要使用新版本SDK。 Android studio下载地址 命令行工具 | Android Studio | Android Developers 解决…...
【Redis】缓存三剑客问题实践(上)
本篇对缓存三剑客问题进行介绍和解决方案说明,下篇将进行实践,有需要的同学可以跳转下篇查看实践篇:(待发布) 缓存三剑客是什么? 缓存三剑客指的是在分布式系统下使用缓存技术最常见的三类典型问题。它们分…...
2025年4月22日(平滑)
在学术和工程语境中,表达“平滑”需根据具体含义选择术语。以下是专业场景下的精准翻译及用法解析: 1. 数学/信号处理中的「平滑」(消除噪声) Smooth (verb/noun/adjective) “Apply a Gaussian filter to smooth the noisy signa…...
给vue-admin-template菜单栏 sidebar-item 添加消息提示
<el-badge :value"200" :max"99" class"item"><el-button size"small">评论</el-button> </el-badge> <!-- 在 SidebarItem.vue 中 --> <template><div v-if"!item.hidden" class&q…...
C++(初阶)(十二)——stack和queue
十二,stack和queue 十二,stack和queueStackQueuepriority_queue 简单使用模拟实现deque Stack 函数说明stack()构造空栈empty()判断栈是否为空size()返回栈的有效元素个数top()返会栈顶元素的引用push()将所给元素val压入栈中pop()将栈的尾部元素弹出 …...
数据采集:AI 发展的基石与驱动力
人工智能(AI)无疑是最具变革性的技术力量之一,正以惊人的速度重塑着各行各业的格局。从智能语音助手到自动驾驶汽车,从精准的医疗诊断到个性化的推荐系统,AI 的广泛应用已深刻融入人们的日常生活与工作的各个层面。而在…...
Kubernetes Docker 部署达梦8数据库
Kubernetes & Docker 部署达梦8数据库 一、达梦镜像获取 目前达梦官方暂未在公共镜像仓库提供Docker镜像,需通过达梦官网联系获取官方镜像包。 二、Kubernetes部署方案 部署配置文件示例 apiVersion: apps/v1 kind: Deployment metadata:labels:app: dm8na…...
宏碁笔记本电脑怎样开启/关闭触摸板
使用快捷键:大多数宏碁笔记本可以使用 “FnF7” 或 “FnF8” 组合键来开启或关闭触摸板,部分型号可能是 “FnF2”“FnF9” 等。如果不确定,可以查看键盘上的功能键图标,一般有触摸板图案的按键就是触摸板的快捷键。通过设备管理器…...
计算机组成与体系结构:缓存(Cache)
目录 为什么需要 Cache? 🧱 Cache 的分层设计 🔹 Level 1 Cache(L1 Cache)一级缓存 🔹 Level 2 Cache(L2 Cache)二级缓存 🔹 Level 3 Cache(L3 Cache&am…...
【VS Code】打开远程服务器Docker项目或文件夹
1、配置SSH连接 在VS Code中,按CtrlShiftP打开命令面板。 输入并选择Remote-SSH: Connect to Host...。 输入远程服务器的SSH地址(例如userhostname或userip_address)。 如果这是您第一次连接到该主机,VS Code可能会要求您配置…...