Direct3D 12——混合——混合

news2024/11/15 15:37:49

混合运算

typedef enum D3D12_BLEND_OP {
  D3D12_BLEND_OP_ADD = 1,  //添加源 1 和源 2。
  D3D12_BLEND_OP_SUBTRACT = 2,//从源 2 中减去源 1。
  D3D12_BLEND_OP_REV_SUBTRACT = 3,//从源 1 中减去源 2。
  D3D12_BLEND_OP_MIN = 4,//查找源 1 和源 2 的最小值。
  D3D12_BLEND_OP_MAX = 5//查找源 1 和源 2 的最大值。
} ;

运行时单独实现 RGB 混合和 alpha 混合。 因此,混合状态需要针对 RGB 数据和 alpha 数据执行单独的混合操作。 这些混合操作在 D3D12_RENDER_TARGET_BLEND_DESC 结构中指定。 混合块图中显示了两个源(源 1 和源 2)。

混合状态由 输出合并阶段 使用,以确定如何将两个 RGB 像素值和两个 alpha 值混合在一起。 两个 RGB 像素值和两个 alpha 值是像素着色器输出的 RGB 像素值和已位于输出呈现目标中的 RGB 像素值和 alpha 值。 D3D12_BLEND值控制混合阶段用来调节像素着色器、呈现目标或两者的值的数据源。 D3D12_BLEND_OP值控制混合阶段如何以数学方式合并这些调节值。

在求取最小值或最大值(min/max )的运算中会忽略混合因子。

irect3D从最近几版开始加入了一项新特性,通过逻辑运算符对源颜色和目标颜色进行混合,用以 取代上述传统的混合方程。这些逻辑运算符如下:

enum D3D12_LOGIC_OP
    {
        D3D12_LOGIC_OP_CLEAR	= 0,//清除呈现目标 
        D3D12_LOGIC_OP_SET	= ( D3D12_LOGIC_OP_CLEAR + 1 ) ,//设置呈现目标
        D3D12_LOGIC_OP_COPY	= ( D3D12_LOGIC_OP_SET + 1 ) ,//从像素着色器输出) 复制呈现目标 (源。
        D3D12_LOGIC_OP_COPY_INVERTED	= ( D3D12_LOGIC_OP_COPY + 1 ) ,//执行呈现目标 () ~s 的倒排副本。
        D3D12_LOGIC_OP_NOOP	= ( D3D12_LOGIC_OP_COPY_INVERTED + 1 ) ,//在呈现目标视图中 (d 目标) 中,不会对呈现目标执行任何操作
        D3D12_LOGIC_OP_INVERT	= ( D3D12_LOGIC_OP_NOOP + 1 ) ,//反转呈现目标 (~d) 。
        D3D12_LOGIC_OP_AND	= ( D3D12_LOGIC_OP_INVERT + 1 ) ,//对呈现目标执行逻辑 AND 操作, (s & d) 。
        D3D12_LOGIC_OP_NAND	= ( D3D12_LOGIC_OP_AND + 1 ) ,//对呈现目标执行逻辑 NAND 操作 (~(s & d)) 。
        D3D12_LOGIC_OP_OR	= ( D3D12_LOGIC_OP_NAND + 1 ) ,//对呈现目标执行逻辑 OR 操作 (s
        D3D12_LOGIC_OP_NOR	= ( D3D12_LOGIC_OP_OR + 1 ) ,//对呈现目标执行逻辑 NOR 操作 (~ (s
        D3D12_LOGIC_OP_XOR	= ( D3D12_LOGIC_OP_NOR + 1 ) ,//对呈现目标执行逻辑 XOR 操作 () s ^ d 。
        D3D12_LOGIC_OP_EQUIV	= ( D3D12_LOGIC_OP_XOR + 1 ) ,//对呈现目标执行逻辑相等操作 (~(s ^ d)) 。
        D3D12_LOGIC_OP_AND_REVERSE	= ( D3D12_LOGIC_OP_EQUIV + 1 ) ,//对呈现目标执行逻辑 AND 和反向操作, (s & ~d) 。
        D3D12_LOGIC_OP_AND_INVERTED	= ( D3D12_LOGIC_OP_AND_REVERSE + 1 ) ,//对呈现目标执行逻辑 AND 和反转操作 (~s & d) 。
        D3D12_LOGIC_OP_OR_REVERSE	= ( D3D12_LOGIC_OP_AND_INVERTED + 1 ) ,//对呈现目标执行逻辑 OR 和反向操作 (s
        D3D12_LOGIC_OP_OR_INVERTED	= ( D3D12_LOGIC_OP_OR_REVERSE + 1 ) //对呈现目标执行逻辑 OR 和反转操作 (~s
    } 

此枚举由 D3D12_RENDER_TARGET_BLEND_DESC 结构使用。
注意,不能同时使用传统混合方程与逻辑运算符这两种混合手段,两者只能择其一。另外需要指岀 的是,为了使用逻辑运算符混合技术,就一定要选择它所支持的渲染目标格式一 个格式应当为UINT (无符号整数)的有关类型,否则我们会收到错误提示信息。
在这里插入图片描述

混合因子

enum D3D12_BLEND
    {
        D3D12_BLEND_ZERO	= 1,//混合因子 (0、0、0、0) 。 无预混合操作。
        D3D12_BLEND_ONE	= 2,//混合因子 (为 1、1、1、1) 。 无预混合操作。
        D3D12_BLEND_SRC_COLOR	= 3,//混合因子为 (Rs、Gs、Bs、As) ,即像素着色器 (RGB) 的颜色数据。 无预混合操作。
        D3D12_BLEND_INV_SRC_COLOR	= 4,//混合因子 (为 1 - Rs、1 - Gs、1 - Bs、1 -) ,即像素着色器 (RGB) 的颜色数据。 预混合操作将反转数据,生成 1 - RGB。
        D3D12_BLEND_SRC_ALPHA	= 5,//混合因子 (As、As、As、As) ,即像素着色器 (A) 的 alpha 数据。 无预混合操作。
        D3D12_BLEND_INV_SRC_ALPHA	= 6,//混合因子 (为 1 - As、1 - As、1 - As、1 - As、1 - As) ,即从像素着色器 (A) 的 alpha 数据。 预混合操作将反转数据,生成 1 - A。
        D3D12_BLEND_DEST_ALPHA	= 7,//混合因子 (Ad A dAd Ad) ,即呈现器目标的 alpha 数据。 无预混合操作。
        D3D12_BLEND_INV_DEST_ALPHA	= 8,//混合因子 (1 - Ad 1 - Ad 1 - Ad 1 - Ad) ,即来自呈现目标的 alpha 数据。 预混合操作将反转数据,生成 1 - A。
        D3D12_BLEND_DEST_COLOR	= 9,//混合因子 (Rd、Gd、Bd、Ad) ,即来自呈现器目标的颜色数据。 无预混合操作。
        D3D12_BLEND_INV_DEST_COLOR	= 10,//混合因子 (1 - Rd、1 - Gd、1 - Bd、1 - Ad) ,即来自呈现器目标的颜色数据。 预混合操作将反转数据,生成 1 - RGB。
        D3D12_BLEND_SRC_ALPHA_SAT	= 11,混合因子为 (f、f、f、1) ;其中 f = min (As, 1- Ad) 。 预混合操作将数据固定到 1 或更少
        D3D12_BLEND_BLEND_FACTOR	= 14,//混合因子是ID3D12GraphicsCommandList::OMSetBlendFactor 的混合因子集。 无预混合操作。
        D3D12_BLEND_INV_BLEND_FACTOR	= 15,//混合因子是 ID3D12GraphicsCommandList::OMSetBlendFactor 的混合因子集。 预混合运算将反转混合因子,生成 1 - blend_factor。
        D3D12_BLEND_SRC1_COLOR	= 16,//混合因子是数据源,既作为像素着色器输出的颜色数据。 没有预混合操作。 此混合因子支持双源颜色混合。
        D3D12_BLEND_INV_SRC1_COLOR	= 17,混合因子是数据源,既作为像素着色器输出的颜色数据。 预混合操作将反转数据,生成 1 - RGB。 此混合因子支持双源颜色混合。
        D3D12_BLEND_SRC1_ALPHA	= 18,混合因子是像素着色器作为 alpha 数据输出的数据源。 没有预混合操作。 此混合因子支持双源颜色混合。
        D3D12_BLEND_INV_SRC1_ALPHA	= 19,混合因子是像素着色器作为 alpha 数据输出的数据源。 预混合操作将反转数据,生成 1 - A。此混合因子支持双源颜色混合。
        D3D12_BLEND_ALPHA_FACTOR = 20,混合因子 (A、A、A) ,其中常量 A 取自 OMSetBlendFactor 的混合因子集。若要在目标计算机上成功使用此常量,从 ID3D12Device::CheckFeatureSupport返回的D3D12_FEATURE_DATA_D3D12_OPTIONS13必须将其 AlphaBlendFactorSupported 设置为 TRUE。
        D3D12_BLEND_INV_ALPHA_FACTOR= 21,混合因子 (1 – A、1 – A、1 – A、1 – A、1 – A) ,其中常量 A 取自 OMSetBlendFactor 的混合因子集。若要在目标计算机上成功使用此常量,从ID3D12Device::CheckFeatureSupport返回的D3D12_FEATURE_DATA_D3D12_OPTIONS13必须将其 AlphaBlendFactorSupported 设置为 TRUE。
    } 

上述的混合因子皆可运用于RGB混合方程。但对于alpha混合方程来说,却不可使用以.COLOR作 为结尾的混合因子。

我们可以用下列函数来设置混合因于:
void ID3D12GraphicsCommandList::OMSetBlendFactor(const FLOAT BlendFactor[ 4 ]);若传入nullptr,则恢复值为(1, 1, 1> 1)的默认混合因子。

混合状态

    D3D12_GRAPHICS_PIPELINE_STATE_DESC opaquePsoDesc;
opaquePsoDesc.BlendState = CD3DX12_BLEND_DESC(D3D12_DEFAULT);

为了配置非默认混合状态,我们必须填写D3D12_BLEND_DESC结构体。该结构体的定义如下。

typedef struct D3D12_BLEND_DESC (
BOOL AlphaToCoverageEnable;	// 默认值为 False
BOOL IndependentBlendEnable;	// 默认值为 False
D3D12_RENDER_TARGET_BLEND_DESC RenderTarget[8];
} 

1.AlphaToCoverageEnable:指定为 true,则启用 alpha-to-coverage 功能,这是一种在渲染叶 片或门等纹理时极其有用的一种多重釆样技术。若指定为false,则禁用alpha-to-coverage功能。 另外,要使用此技术还需开启多重采样(即创建后台缓冲区与深度缓冲区时要启用多重采样)。

2.IndependentBlendEnable: Direct3D最多可同时支持8个渲染目标。若此标志被置为true, 即表明可以向每一个渲染目标执行不同的混合操作(不同的混合因子、不同的混合运算以及设 置不同的混合禁用或开启状态等)。如果将此标志设为false,则意味着所有的渲染目标均使用 D3D12_BLEND_DESC: : RenderTarget数组中第一个元素所描述的方式进行混合。多渲染目标技术常用于高级算法,而现在我们只假设每次仅向一个渲染目标进行绘制。

3.RenderTarget:具有 8 个 D3D12_RENDER_TARGET_BLEND_DESC 元素的数组,其中的第 i 个元素描述了如何针对第i个渲染目标进行混合处理。如果IndependentBlendEnable被设 置为false,则所有的渲染目标都将根据RenderTarget [0]的设置进行混合运算。

typedef struct D3D12_RENDER_TARGET_BLEND_DESC
    {
    BOOL BlendEnable;// 默认值为 False
    BOOL LogicOpEnable;// 默认值为 False
    D3D12_BLEND SrcBlend;// 默认值为 D3D12_BLEND_ONE
    D3D12_BLEND DestBlend;// 默认值为 D3D12_BLEND_ZERO
    D3D12_BLEND_OP BlendOp;// 默认值为 D3D12_BLEND_OP_ADD
    D3D12_BLEND SrcBlendAlpha;// 默认值为 D3D12_BLEND_ONE
    D3D12_BLEND DestBlendAlpha; // 默认值为 D3D12_BLEND_ZERO
    D3D12_BLEND_OP BlendOpAlpha; // 默认值为 D3D12_BLEND_OP_ADD
    D3D12_LOGIC_OP LogicOp;// 默认值为 D3D12_LOGIC_OP_NOOP
    UINT8 RenderTargetWriteMask;// 默认值为 D3D12_COLOR_WRITE_ENABLE_ALL
    } 	

1.BlendEnable:指定为true,则启用常规混合功能;指定为false,则禁用常规混合功能。注意, 不能将BlendEnable与LogicOpEnable同时置为true,只能从常规混合与逻辑运算符混合 两种方式中选择一种。

2.LogicOpEnable:指定为true,则启用逻辑混合运算,反之则反。注意,不能将BlendEnable 和LogicOpEnable同时设置为true,只能从常规混合与逻辑运算混合中选择一种。

3.SrcBlend:枚举类型D3D12_BLEND中的成员之一,用于指定RGB混合中的源混合因子。

4.DestBlend:枚举类型D3D12_BLEND中的成员之一,用于指定RGB混合中的目标混合因子。

5.BlendOp:枚举类型D3D12_BLEND_OP中的成员之一,用于指定RGB混合运算符。

6.SrcBlendAlpha:枚举类型D3D12_BLEND中的f 成员,指定了 alpha混合中的源混合因子。

7.DestBlendAlpha:枚举类型D3D12_BLEND中的一个成员,指定了 alpha混合中的目标混合 因子。

8.BlendOpAlpha:枚举类型D3D12_BLEND_OP中的一个成员,指定了 alpha混合运算符。

9.LogicOp:枚举类型D3D12_LOGIC_OP中的成员之一,指定了源颜色与目标颜色在混合时所 用的逻辑运算符.

10.10.RenderTargetWriteMask:下列标志中一种或多种的组合。

enum D3D12_COLOR_WRITE_ENABLE
    {
        D3D12_COLOR_WRITE_ENABLE_RED	= 1,//允许将数据存储在红色组件中。
        D3D12_COLOR_WRITE_ENABLE_GREEN	= 2,//允许数据存储在绿色组件中。
        D3D12_COLOR_WRITE_ENABLE_BLUE	= 4,//允许将数据存储在蓝色组件中。
        D3D12_COLOR_WRITE_ENABLE_ALPHA	= 8,//允许将数据存储在 alpha 组件中。
        D3D12_COLOR_WRITE_ENABLE_ALL	= ( ( ( D3D12_COLOR_WRITE_ENABLE_RED | D3D12_COLOR_WRITE_ENABLE_GREEN )  | D3D12_COLOR_WRITE_ENABLE_BLUE )  | D3D12_COLOR_WRITE_ENABLE_ALPHA ) //允许将数据存储在所有组件中。
    } 

在D3D12_BLEND_DESC结构的 RenderTarget 成员中指定一组D3D12_RENDER_TARGET_BLEND_DESC结构,以描述呈现目标的混合状态;一次最多可将 8 个呈现目标绑定到输出合并阶段。

这些标志控制着混合后的数据可被写入后台缓冲区中的哪些颜色通道。例如,通过指定 D3D12_COLOR_WRITE_ENABLE_ALPHA可以禁止向RGB通道的写操作,而仅写入alpha通道的有关数 据。对于一些高级技术而言,这种灵活性是极其实用的。当混合功能被禁止时,从像素着色器返回的颜 色数据将按没有设置上述写掩码来进行处理(即不对目标像素执行任何操作)。

混合与深度缓冲区

在使用加法/减法/乘法运算进行混合时,会涉及深度测试(depth test)这一问题。我们仅用加法混合来讲解,但其中的思路也同样适用于减法/乘法的混合运算。如果要用加法混合来渲染 一个物体集合S,并希望S中的物体不会互相遮挡,这就意味着我 们只需将这些物体的颜色数据简单地累加即可。为此, 我们不愿在S中的物体之间进行深度测试。若开启深度测试,却 并没有按从后至前的顺序进行绘制,那么,当S中的两个物体存 在遮挡关系,经过深度测试后,靠后的像素片段便会被丢弃,这 意味着该物体的像素颜色将不会被累加至混合求和的结果之中。 在渲染S中的物体时,我们可以通过禁止向深度缓冲区的写操作 来禁用S中物体之间的深度测试。由于深度写入操作已被禁止, S中的物体在进行加法混合时,便不会将深度信息写入深度缓冲 区,因此,S中的物体便不会因深度测试而直接覆盖其后的物体。 注意,我们只是在绘制S (要用加法混合的方式来绘制的一个物 体集合)中的物体时禁用了深度值写入操作,但深度值读取与深 度检测仍然是开启的。这样一来,非混合几何体(比混合几何体 先绘制的物体)仍将遮挡其后的混合几何体。比方说,如果我们 有一个需要在墙后进行加法混合的物体集合,那么这些混合物体 最后是看不到的,因为以非混合方式绘制的实心不透明墙体会挡 住它们。

alpha 通道

源alpha分量能够用于在RGB混合的过程中控制像素的透明度。 而混合方程中所用的源颜色实则来自于像素着色器。

	D3D12_GRAPHICS_PIPELINE_STATE_DESC alphaTestedPsoDesc = opaquePsoDesc;
	alphaTestedPsoDesc.PS = 
	{ 
		reinterpret_cast<BYTE*>(mShaders["alphaTestedPS"]->GetBufferPointer()),
		mShaders["alphaTestedPS"]->GetBufferSize()
	};
	alphaTestedPsoDesc.RasterizerState.CullMode = D3D12_CULL_MODE_NONE;
	ThrowIfFailed(md3dDevice->CreateGraphicsPipelineState(&alphaTestedPsoDesc, IID_PPV_ARGS(&mPSOs["alphaTested"])));
描述光栅器状态。
typedef struct D3D12_RASTERIZER_DESC
    {
    D3D12_FILL_MODE FillMode;//默认值D3D12_FILL_MODE_SOLID
    D3D12_CULL_MODE CullMode;//默认值D3D12_CULL_MODE_BACK
    BOOL FrontCounterClockwise;//默认值FALSE
    INT DepthBias;// 默认值	0
    FLOAT DepthBiasClamp;//默认值	0.0f
    FLOAT SlopeScaledDepthBias;//默认值0.0f
    BOOL DepthClipEnable;//默认值	TRUE
    BOOL MultisampleEnable;//默认值	FALSE
    BOOL AntialiasedLineEnable;//默认值	FALSE
    UINT ForcedSampleCount;//默认值	0
    D3D12_CONSERVATIVE_RASTERIZATION_MODE ConservativeRaster;//默认值D3D12_CONSERVATIVE_RASTERIZATION_MODE_OFF
    } 

1.FillMode:一个D3D12_FILL_MODE类型的值,该值指定呈现时要使用的填充模式。

2.CullMode:一个 D3D12_CULL_MODE类型的值,该值指定不绘制面向指定方向的三角形。

3.FrontCounterClockwise:确定三角形是正面还是背面。 如果此成员为 TRUE,则如果三角形顶点在呈现器目标上逆时针,则三角形将被视为正面;如果顶点顺时针,则被视为朝后。 如果此参数为 FALSE,则相反为 true。

4.DepthBias:给定像素斜率上的标量。有关深度偏差的信息,请参阅深度偏差 。

5.DepthBiasClamp:像素的最大深度偏差。 有关深度偏差的信息,请参阅 深度偏差。

5.SlopeScaledDepthBias:像素的最大深度偏差。 有关深度偏差的信息,请参阅 深度偏差。

6.DepthClipEnable:指定是否启用基于距离的剪裁。硬件始终执行光栅化坐标的 x 和 y 剪裁。 当 DepthClipEnable 设置为 default–TRUE 时,硬件还会剪裁 z 值 (即,硬件) 执行以下算法的最后一步。将 DepthClipEnable 设置为 FALSE 时,硬件会跳过 z 剪裁 (即,上述算法中的最后一步) 。 但是,硬件仍执行“0 < w”剪裁。 禁用 z 剪裁时,可能会导致像素级别的深度排序不正确。 但是,当禁用 z 剪裁时,模具阴影实现将简化。 换句话说,可以避免对超出反向剪裁平面的几何图形进行复杂的特殊情况处理。

7.MultisampleEnable:指定在多重采样抗锯齿 (MSAA) 呈现目标上使用四边形或 alpha 线抗锯齿算法。 设置为 TRUE 以使用四边形线抗锯齿算法,设置为 FALSE 以使用 alpha 行抗锯齿算法。

8.AntialiasedLineEnable:指定是否启用行抗锯齿;仅当进行线条绘制且 MultisampleEnable 为 FALSE 时适用。

9.ForcedSampleCount:类型: UINT。UAV 呈现或光栅化时强制的样本计数。 有效值为 0、1、4、8 和可选 16。 0 表示样本计数不是强制的。

注意 如果要在 ForcedSampleCount 设置为 1 或更大的情况下进行呈现,必须遵循以下准则:
1.不要绑定深度模具视图。
2.禁用深度测试。
3.确保着色器不输出深度。
4.如果有任何呈现目标视图绑定 (D3D12_DESCRIPTOR_HEAP_TYPE_RTV) 且 ForcedSampleCount 大于 1,请确保每个呈现目标只有一个样本。
5.不要以采样频率操作着色器。 因此, ID3D12ShaderReflection:IsSampleFrequencyShader 返回 FALSE。否则,呈现行为未定义。

注意 对于 功能级别 9.1、9.2、9.3 和 10.0,如果将 MultisampleEnable 设置为 FALSE,则即使样本计数大于 1 的呈现目标,运行时也会呈现所有点、线和三角形,而不会抗锯齿。 对于功能级别 10.1 及更高版本, MultisampleEnable 的设置对 MSAA 的点和三角形没有影响,并且仅影响此表中所示的线条呈现算法的选择:
在这里插入图片描述
MultisampleEnable 和 AntialiasedLineEnable 成员的设置仅适用于多重采样抗锯齿 (MSAA) 呈现目标 (即,呈现样本计数大于 1) 的目标。 由于 功能级别 行为存在差异,并且只要不执行任何线条绘制或不介意线条呈现为四边形,我们建议每当在 MSAA 呈现目标上呈现时,始终将 MultisampleEnable 设置为 TRUE 。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/420385.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【云原生|Docker】13-Docker-compose详解

【云原生Docker】13-Docker-compose详解 文章目录【云原生Docker】13-Docker-compose详解前言docker-compose简介docker-compose安装docker-compose基本示例Docker Compose常用命令说明Docker Compose文件详解versionserviceimagebuildcommandlinksexternal_linksportsexposeen…

Win11的两个实用技巧系列之找不到wifi网络的解决方法、双系统开机选择系统方法

Win11装了VMware后找不到wifi网络的解决方法 有用户在电脑上安装了VMware虚拟机来使用的时候&#xff0c;发现虚拟机中无法进行无线网络的连接了&#xff0c;本文就为大家带来了详细的解决方法&#xff0c;一起看看吧 Win11装了VMware后找不到wifi网络的解决方法教学分享。有用…

助力信创国产化,Solon v2.2.9 发布

Solon 是一个高效的 Java 应用开发框架&#xff1a;更快、更小、更简单。它不是 Spring、没有使用 Servlet、JavaEE 接口&#xff0c;是一个有自己接口标准的开放生态。可以为应用软件国产化提供支持&#xff0c;助力信创建设。 150来个生态插件&#xff0c;覆盖各种不同的应用…

【SSM框架】Spring更简单的存储对象

Spring更简单的存储对象将Bean对象简单存储到Spring容器中使用五大类注解来存储Bean对象使⽤ Controller 存储 bean 对象使⽤ Service 存储 bean 对象使⽤ Repository 存储 bean 对象使⽤ Component 存储 bean 对象使⽤ Configuration为什么要有五大类注解五大类注解的关系五大…

【C++初阶】类与对象(一)

文章目录一、面向过程和面向对象初步认识二、类的引入三、类的定义四、类的访问限定符及封装1 、访问限定符2.封装五、类的作用域六、类的实例化七、类对象模型1.探究存储方式2.结构体内存对齐规则八、this指针1、this指针的引出2.this指针的特性八、C语言和C实现Stack的对比总…

漏洞挖掘小技巧(一)

Swagger UI反射XSS Swagger UI是目前最流行的RestFul接口API文档和测试工具。 首先写一个 json的 XSS 负载 https://gist.githubusercontent.com/ramkrivas/c47c4a49bea5f3ff99a9e6229298a6ba/raw/e2e610ea302541a37604c7df8bcaebdcb109b3ba/xsstest.json回到Swagger UI&…

轮廓特征属性及应用

轮廓特征属性及应用 1)凸包 凸包(Convex Hull)是一个计算机几何图形学中的概念, 简单来说, 给定二维平面点集, 凸包就是能够将最外层的点连接起来构成的凸多边形, 它能够包含点集中所有的点。物体的凸包检测常应用在物体识别、手势识别及边界检测等领域。 寻找凸包—cv2.co…

数字中国背景下,企业加大数据决策投入,零代码+商业智能成为新选型 | 爱分析洞察

自“十四五”规划将“加快数字化发展&#xff0c;建设数字中国”单独成篇&#xff0c;从国家战略层面明确了数字化转型的重要性&#xff0c;国家层面有关支持数字经济发展的顶层设计与配套政策此后相继出台。2023年3月1日&#xff0c;中共中央、国务院印发了《数字中国建设整体…

一、基础算法7:位运算 模板题+算法模板(二进制中1的个数)

文章目录算法模板求n的第k位数字返回n的最后一位1求一个数x的二进制中1的个数模板模板题二进制中1的个数原题链接题目题解补充输出一个数n的补码x的二进制并按位输出关于原码&#xff0c;反码&#xff0c;补码算法模板 求n的第k位数字 n >> k & 1返回n的最后一位1 …

iOS-关联对象(Objective-C)

关联对象关联对象的应用分类中的 property使用关联对象关联对象的实现objc_setAssociatedObjectAssociationsManager如何存储 ObjcAssociationnew_value ! nilnew_value nilsetHasAssociatedObjects()objc_getAssociatedObjectobjc_removeAssociatedObjects写到最后关于应用关…

ESP32设备驱动-VEML6040颜色传感器驱动

VEML6040颜色传感器驱动 文章目录 VEML6040颜色传感器驱动1、VEML6040介绍2、硬件准备3、软件准备4、驱动实现1、VEML6040介绍 VEML6040 颜色传感器可感应红光、绿光、蓝光和白光,并使用 CMOS 工艺将光电二极管、放大器和模拟/数字电路集成到单个芯片中。 通过应用颜色传感器…

【Spring】— Spring基础学习

Spring基础学习一、Spring概述1.什么是Spring2.Spring的下载及目录结构2.1 Spring框架包2.2 第三方依赖包二、控制反转&#xff08;IoC&#xff09;与依赖注入&#xff08;DI&#xff09;1.什么是控制反转&#xff08;IoC&#xff09;2.什么是依赖注入&#xff08;DI&#xff0…

u-view2.0 引入iconfont(阿里字体图标库)详细步骤!

uView已通过大量的实践中&#xff0c;收集了用户最有可能需要用到的图标&#xff0c;见Icon 图标&#xff0c;但我们也相信&#xff0c;它肯定无法覆盖所有的场景和需求。 用户也可以使用标签的方式&#xff0c;自行引入字体图标&#xff0c;为何要通过扩展的方式集成呢&#…

树莓派 ROS 学习(二)小乌龟 turtlesim

添加链接描述 目录 创建catkin工作空间 小乌龟turtlesim节点 启动节点 turtlesim节点 turtlesim 话题与消息 查看话题的消息类型 查看消息类型的具体内容 查看话题的值 改变背景颜色 获取参数列表 获取参数值 修改颜色 控制乌龟运动 通过发布话题控制乌龟运动 通过键盘控制乌龟…

力扣sql中等篇练习(一)

力扣sql中等篇练习(一) 1 第二高的薪水 1.1 题目内容 1.1.1 基本题目信息 1.1.2 示例输入输出 1.2 示例sql语句 SELECT IFNULL((SELECT distinct salary SecondHighestSalaryFROM EmployeeORDER BY salary desclimit 1,1),null ) SecondHighestSalary1.3 运行截图 2 分数排…

【C++】命名空间,缺省参数,函数重载,引用,内联函数,auto 关键字

目录1. 命名空间2. 输入输出3. 缺省参数4. 函数重载为什么C支持函数重载&#xff1f;5. 引用5.1 引用作函数参数&#xff08;输出型参数&#xff09;5.2 作函数的返回值关于函数的返回值&#xff1a;5.3 引用权限关于类型转换&#xff1a;5.4 引用和指针6. 内联函数6.1 C推荐的…

2、在vscode上创建第一个C++多文件编译工程(即如何添加task.json和launch.json文件到工程里面)

文章目录1、新建一个工程目录2、在vscode打开刚建立的工程目录&#xff0c;建立cpp文件3、设置C/C编译的选项:c_cpp_properties.json&#xff08;1&#xff09;鼠标点在.c的源文件内部&#xff0c;按 CtrlShiftp 快捷键&#xff0c;在弹出的界面中选择: [C/C:编配置(UI)]&#…

RK3568平台开发系列讲解(Linux系统篇)Linux 内部的全景图

🚀返回专栏总目录 文章目录 一、Linus 是谁二、Linux 内核全景图三、漫画:Linux 内核都有啥沉淀、分享、成长,让自己和他人都能有所收获!😄 📢本篇我们一起认识这样一个计算机黑客,看看他是怎样创造出影响世界的 Linux,然后进一步了解一下 Linux 的内部结构。 一、…

从0学习stm32第二天

1.存储器结构 程序存存储器&#xff0c;数据存储器&#xff0c;寄存器和输入输出端口&#xff0c;被组织在同一个4G的线性地址空间中&#xff1b; 可以通过地址的方法访问对应的存储器或寄存器&#xff1b; 比如 0X12 34 56 78在内存中存储 低地址----------------------…

vue3组合式API和vite+ts

创建项目 npm create vitelatest . 选择ts版本 直接安装依赖项目启动 vite项目配置路径 cnpm i --save-dev types/node 让ts项目支持node环境 vite构建工具中配置了路径加载组件 import HelloWorld from "/components/HelloWorld.vue"; 界面显示正常 引入文件路径报错…