当前位置: 首页 > news >正文

OSG开发笔记(三十九):OSG中模型的透明度实现、球体透明度Demo

​若该文为原创文章,未经允许不得转载
本文章博客地址:https://blog.csdn.net/qq21497936/article/details/144424531
各位读者,知识无穷而人力有穷,要么改需求,要么找专业人士,要么自己研究

长沙红胖子Qt(长沙创微智科)博文大全:开发技术集合(包含Qt实用技术、树莓派、三维、OpenCV、OpenGL、ffmpeg、OSG、单片机、软硬结合等等)持续更新中…

OSG开发专栏(点击传送门)

上一篇:《OSG开发笔记(三十八):osg3.0.0基于windows平台msvc2017x64编译器编译并移植Demo》
下一篇:持续补充中…


前言

  在OSG中,对于一些效果未被选中或者包含等业务,需要半透明效果来实现。
  本篇描述OSG的半透明实现方式。


Demo

  请添加图片描述


透明

功能概述

  透明效果在三维场景中扮演着重要角色,它能够模拟玻璃、水体、烟雾等自然现象,增加场景的层次感和真实感。然而,透明效果的实现并非易事,它涉及到复杂的渲染技术和算法。OSG作为一个功能强大的场景图库,为透明效果的实现提供了强有力的支持。

材质属性的调整

  在OSG中,实现透明效果的第一步是调整材质属性。材质属性决定了物体表面的外观特性,包括颜色、光泽度、反射率和透明度等。要实现透明效果,需要设置材质的透明度属性。
  OSG中的osg::Material类用于设置物体的材质属性。通过调整osg::Material::TRANSPARENCY属性,我们可以控制物体的透明度。同时,我们还需要设置物体的颜色属性,并指定颜色的RGBA分量,其中A分量表示透明度。

深度测试的设置

  深度测试是三维渲染中的一项重要技术,它用于确定物体在场景中的前后关系。在实现透明效果时,深度测试的设置尤为关键。需要确保深度测试是开启的,以便正确处理透明物体与背景或其他物体的遮挡关系。然而,由于透明物体具有部分遮挡的特性,还需要考虑深度写入(GL_DEPTH_WRITEMASK)的设置。在某些情况下,关闭深度写入可以避免透明物体渲染时的深度冲突问题。

渲染顺序的控制

  透明物体的渲染顺序对其最终呈现效果具有重要影响。为了获得正确的渲染效果,我们需要确保透明物体按照从远到近的顺序进行渲染。OSG提供了透明排序机制来帮助我们实现这一目标。
  通过设置osg::StateSet::TRANSPARENT_BIN渲染提示,我们可以将透明物体添加到单独的渲染队列中。OSG将按照从远到近的顺序渲染这些物体,从而确保渲染结果的正确性。

混合模式的应用

  混合模式是实现透明效果的关键技术之一。它决定了透明物体与背景或其他物体混合时的颜色计算方式。在OSG中,我们可以通过设置osg::BlendFunc属性来指定混合模式。
  常见的混合模式包括源颜色与目的颜色的加权和、源颜色与目的颜色的差值等。通过选择合适的混合模式,我们可以获得不同的透明效果。例如,使用GL_SRC_ALPHA和GL_ONE_MINUS_SRC_ALPHA作为混合因子,可以实现标准的透明度混合效果。
  在OpenSceneGraph(OSG)中,实现透明效果通常涉及调整材质属性、深度测试设置以及渲染顺序。
  要设置对象透明,是通过调整材质的透明度属性。osg::Material 类用于设置对象的材质属性,其中 osg::Material::TRANSPARENCY属性可以用于设置透明度。

基本实现流程

  • 创建材质实例,通过材质实现的(不是常规思维RGBA,因为A在此无效)
  • 材质实例设置材质颜色,材质颜色只有RGB有效,A无效
  • 设置材质实例的透明度
  • 获取模型(需要透明)的模型状态集
  • 状态集开启模型的深度测试
  • 状态集设置透明通道单独渲染
  • 状态集设置混合设置模式

注意事项

  • 确保透明对象在渲染队列中的顺序是正确的。OSG的透明排序机制可以帮助处理这个问题,但在某些复杂场景中,你可能需要手动控制渲染顺序。
  • 深度写入(GL_DEPTH_WRITEMASK)和深度测试(GL_DEPTH_TEST)的设置会影响透明对象的渲染效果。
  • 混合模式(osg::BlendFunc)的设置会影响透明对象与背景或其他对象的混合方式。

  通过上述步骤,应该能够在OpenSceneGraph中实现基本的透明效果。如果需要更高级的透明处理,可以进一步探索OSG的渲染队列和混合模式设置。


透明实现步骤

步骤一:获取状态集

  在这里插入图片描述

// 步骤一:获取状态集
osg::ref_ptr<osg::StateSet> pStateSet = pNode->getOrCreateStateSet();

步骤二:开启深度测试

  在这里插入图片描述

// 步骤二:状态集 设置深度测试开启,确保透明的物体深度测试开启
pStateSet->setMode(GL_DEPTH_TEST, osg::StateAttribute::ON);

步骤三:创建材质实例

  在这里插入图片描述

// 步骤三:创建材质实例
osg::ref_ptr<osg::Material> pMaterial = new osg::Material;

步骤四:设置材质颜色(理论上这的a无效)

  在这里插入图片描述

// 步骤四:材质实例 设置材质颜色(RGB部分),透明度在颜色数组中设置
pMaterial->setDiffuse(osg::Material::FRONT_AND_BACK, osg::Vec4(color.x, color.y, color.z, color.a));

步骤五:设置材质透明度(理论上由这里控制透明度)

  在这里插入图片描述

// 步骤五:材质实例 设置透明度(0-255): 设置了反倒没图形了
pMaterial->setTransparency(osg::Material::FRONT_AND_BACK, color.a * 255.0);
//    pMaterial->setTransparency(osg::Material::FRONT_AND_BACK, 255.0);

步骤六:设置材质

  在这里插入图片描述

// 步骤六:状态集 设置材质
pStateSet->setAttributeAndModes(pMaterial.get());

步骤七:设置透明通道单独渲染

  在这里插入图片描述

// 步骤七:状态集 设置透明通道单独渲染
pStateSet->setRenderingHint(osg::StateSet::TRANSPARENT_BIN);

步骤八:设置渲染混合模式

  在这里插入图片描述

// 步骤八:状态集 设置渲染混合模式
pStateSet->setAttributeAndModes(new osg::BlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA));

Demo源码

OsgManager.cpp相关函数代码

osg::ref_ptr<osg::Geode> OsgManager::createSphere(Point3F center, double radius, double ratio)
{// 绘制球体// 步骤一:创建一个用户保存几何信息的对象osg::Geodeosg::ref_ptr<osg::Geode> pGeode = new osg::Geode;// 步骤二:创建专门指明精细度的类osg::TessellationHints,并设置对应精细度osg::ref_ptr<osg::TessellationHints> pHints = new osg::TessellationHints;pHints->setDetailRatio(ratio);// 步骤三:绘制几何类型(几何体)pGeode->addDrawable(new osg::ShapeDrawable(new osg::Sphere(osg::Vec3(center.x, center.y, center.y), radius), pHints));return pGeode.get();
}osg::ref_ptr<osg::Material> OsgManager::setTransparency(osg::Node *pNode, Point4F color)
{
#if 1// 设置透明度// 步骤一:获取状态集osg::ref_ptr<osg::StateSet> pStateSet = pNode->getOrCreateStateSet();// 步骤二:状态集 设置深度测试开启,确保透明的物体深度测试开启pStateSet->setMode(GL_DEPTH_TEST, osg::StateAttribute::ON);// 步骤三:创建材质实例osg::ref_ptr<osg::Material> pMaterial = new osg::Material;// 步骤四:材质实例 设置材质颜色(RGB部分),透明度在颜色数组中设置pMaterial->setDiffuse(osg::Material::FRONT_AND_BACK, osg::Vec4(color.x, color.y, color.z, color.a));// 步骤五:材质实例 设置透明度(0-255): 设置了反倒没图形了
//    pMaterial->setTransparency(osg::Material::FRONT_AND_BACK, color.a * 255.0);
//    pMaterial->setTransparency(osg::Material::FRONT_AND_BACK, 255.0);// 步骤六:状态集 设置材质pStateSet->setAttributeAndModes(pMaterial.get());// 步骤七:状态集 设置透明通道单独渲染pStateSet->setRenderingHint(osg::StateSet::TRANSPARENT_BIN);// 步骤八:状态集 设置渲染混合模式pStateSet->setAttributeAndModes(new osg::BlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA));
//    static int z = 0;
//    pStateSet->setRenderBinDetails(z++,QString("RenderBin%1").arg(z).toStdString());
#elseosg::ref_ptr<osg::Material> pMaterial = new osg::Material;// Alpha混合开启osg::ref_ptr<osg::StateSet> pStateSet = pNode->getOrCreateStateSet();//取消深度测试pStateSet->setMode(GL_BLEND,osg::StateAttribute::ON);pStateSet->setMode( GL_DEPTH_TEST, osg::StateAttribute::OFF  );pStateSet->setMode( GL_LIGHTING, osg::StateAttribute::OFF | osg::StateAttribute::PROTECTED );pStateSet->setRenderBinDetails(11, "RenderBin");
#endifreturn pMaterial.get();
}

OsgWidget.cpp

osg::ref_ptr<osg::Node> OsgWidget::getTransparency()
{// 其他demo的控件updateControlVisible(false);osg::ref_ptr<osg::Group> pGroup = new osg::Group();{// 创建几何体osg::ref_ptr<osg::Geode> pGeode = OsgManager::createSphere(Point3F(0, 0, 0), 0.5);// 设置透明度osg::ref_ptr<osg::Material> pMaterial = OsgManager::setTransparency(pGeode, Point4F(1.0, 1.0, 1.0, 0.8));pGroup->addChild(pGeode);}
#if 0{// 创建几何体osg::ref_ptr<osg::Geode> pGeode = OsgManager::createSphere(Point3F(-1, 0, 0), 0.5);// 设置透明度osg::ref_ptr<osg::Material> pMaterial = OsgManager::setTransparency(pGeode, Point4F(1.0, 0.0, 0.0, 0.25));pGroup->addChild(pGeode);}{// 创建几何体osg::ref_ptr<osg::Geode> pGeode = OsgManager::createSphere(Point3F(1, 0, 0), 0.5);// 设置透明度osg::ref_ptr<osg::Material> pMaterial = OsgManager::setTransparency(pGeode, Point4F(0.0, 1.0, 0.0, 0.25));pGroup->addChild(pGeode);}{// 创建几何体osg::ref_ptr<osg::Geode> pGeode = OsgManager::createSphere(Point3F(0, -1, 0), 0.5);// 设置透明度osg::ref_ptr<osg::Material> pMaterial = OsgManager::setTransparency(pGeode, Point4F(0.0, 0.0, 1.0, 0.50));pGroup->addChild(pGeode);}{// 创建几何体osg::ref_ptr<osg::Geode> pGeode = OsgManager::createSphere(Point3F(0, 1, 0), 0.5);// 设置透明度osg::ref_ptr<osg::Material> pMaterial = OsgManager::setTransparency(pGeode, Point4F(1.0, 1.0, 0.0, 0.50));pGroup->addChild(pGeode);}
#endif{// 创建几何体osg::ref_ptr<osg::Geode> pGeode = OsgManager::createSphere(Point3F(0, 0, -1), 0.5);// 设置透明度osg::ref_ptr<osg::Material> pMaterial = OsgManager::setTransparency(pGeode, Point4F(1.0, 0.0, 1.0, 0.5));pGroup->addChild(pGeode);}{// 创建几何体osg::ref_ptr<osg::Geode> pGeode = OsgManager::createSphere(Point3F(0, 0, 1), 0.5);// 设置透明度osg::ref_ptr<osg::Material> pMaterial = OsgManager::setTransparency(pGeode, Point4F(0.0, 1.0, 1.0, 0.5));pGroup->addChild(pGeode);}// 开启深度测试
//    OsgManager::setDepthTest(pGroup, true);// 关闭光照
//    OsgManager::setLighting(pGroup.get(), false);return pGroup.get();
}

工程模板v1.39.0

  在这里插入图片描述


入坑

入坑一:设置透明后不显示

问题

  设置透明后不显示
  在这里插入图片描述

尝试

  去掉透明度设置后,可以显示:
  在这里插入图片描述

  设置后就不显示,检查代码设置流程,并没有发现问题,然后查看了Demo代码,半透明也不显示;
  在这里插入图片描述

  到现在为止,笔者osg3.4.0的ming32版本种,旋转中心和半透明都有问题。
  在这里插入图片描述

  然后继续测试,发现设置透明度没用,但是设置透明颜色可以:
  在这里插入图片描述

解决

  在这里插入图片描述

  在这里插入图片描述

入坑二:出现渲染截面

问题

  出现渲染截面,测试只有球体、球面的时候才出现。
  在这里插入图片描述

  换个颜色:
  在这里插入图片描述

原理

  这是深度测试问题,单独开了每一个的深度测试,需要开这几个模型进行深度测试,开了深度测试也是一样,检查总代码是开了的,尝试下关闭所有深度测试,启动就有问题(开启深度测试,至少启动没有问题):
  在这里插入图片描述

  开启深度测试,关闭光照:
  在这里插入图片描述

  再次尝试打开stl球体模型,也是不行的,效果跟上面的一样,下面是绘制的stl球体:
  在这里插入图片描述

  在这里插入图片描述

解决

  未解决,准备更换版本测试,经过多个版本都是一样。


上一篇:《OSG开发笔记(三十八):osg3.0.0基于windows平台msvc2017x64编译器编译并移植Demo》
下一篇:持续补充中…


本文章博客地址:https://blog.csdn.net/qq21497936/article/details/144424531

相关文章:

OSG开发笔记(三十九):OSG中模型的透明度实现、球体透明度Demo

​若该文为原创文章&#xff0c;未经允许不得转载 本文章博客地址&#xff1a;https://blog.csdn.net/qq21497936/article/details/144424531 各位读者&#xff0c;知识无穷而人力有穷&#xff0c;要么改需求&#xff0c;要么找专业人士&#xff0c;要么自己研究 长沙红胖子Qt…...

phpSpider如何处理网页内容的动态加载问题

phpSpider处理网页内容的动态加载问题&#xff0c;主要采取以下几种策略&#xff1a; 一、分析并直接请求API 现代网站中&#xff0c;很多动态加载的内容是通过后端的API接口以JSON或XML等格式返回的。phpSpider可以通过分析网页的请求&#xff0c;找到这些API接口的URL&…...

【Go】-倒排索引的简单实现

目录 什么是倒排索引 定义 基本结构和原理 分词在倒排索引中的重要性 简单倒排索引的实现 接口定义 简单数据库的实现 倒排索引 正排索引 测试 总结 什么是倒排索引 定义 倒排索引&#xff08;Inverted Index&#xff09;是一种索引数据结构&#xff0c;它是文档检…...

Python:基于PyCharm的简单程序创建及运行-HelloWorld

1. 新建项目 2. 设置文件位置&#xff0c;并创建项目 文件位置由“目录项目名称”组成&#xff0c;如&#xff1a;D:\PycharmProjects\HelloWorld&#xff0c;“HelloWorld”则是项目名称。 3. 创建Python文件 4. 定义文件名称&#xff0c;如HelloWorld。双击【Python 文件】完…...

设置HP条UI

概述 设置常见的生命值条&#xff0c; 实现过程 设置UI/image作为形状 设置UI/Image作为背景 设置UI/image&#xff08;healthfill&#xff09;作为填充图片&#xff0c;层数低于背景 设置heathfill的imagetype为filled fillmethod为horizontal [SerializeField] private Im…...

开源分布式系统追踪-03-CNCF jaeger-02-快速开始

分布式跟踪系列 CAT cat monitor 分布式监控 CAT-是什么&#xff1f; cat monitor-02-分布式监控 CAT埋点 cat monitor-03-深度剖析开源分布式监控CAT cat monitor-04-cat 服务端部署实战 cat monitor-05-cat 客户端集成实战 cat monitor-06-cat 消息存储 skywalking …...

手机实时提取SIM卡打电话的信令声音--社会价值(一、方案解决了什么问题)

手机实时提取SIM卡打电话的信令声音 --社会价值(一、方案解决了什么问题) 一、前言 这段时间&#xff0c;我们在技术范围之外陷入了一个自证或者说下定义的怪圈&#xff0c;即要怎么样去介绍或者描述&#xff1a;我们是一个什么样的产品。它在当前这个世界上&#xff0c;处于…...

FFmpeg功能使用

步骤&#xff1a;1&#xff0c;安装FFmpeg Download FFmpeg 在这里点击->Windows builds from gyan.dev&#xff1b;如下图 会跳到另外的下载界面&#xff1a; 在里面下拉选择点击ffmpeg-7.1-essentials_build.zip&#xff1a; 即可下载到FFmpeg&#xff1b; 使用&#…...

Windows安装WSL子系统及docker,以及WSL和docker配置、使用及问题解决

在Windows操作系统中,Ubuntu子系统(也称为Windows Subsystem for Linux, WSL)为开发者提供了一个在Windows环境下运行Linux环境的平台。然而,有时用户在按照Ubuntu子系统或者使用WSL时,可能会遇到各种问题,下面总结一下解决方式。 想要在Windows上安装Docker(实际上是基…...

飞牛 fnos docker镜像部署OpenSpeedtest宽带网速测试教程

penSpeedTest是一个跨平台的网络测速应用&#xff0c;支持不同操作系统的浏览器&#xff0c;无需安装额外软件或插件。您可以在iPhone、iPad、Android设备、Windows和Linux系统的电脑、手机和平板上直接测试设备与NAS之间的宽带速度。 通过这个可以排查出设备与NAS之间的传输速…...

【kubernetes】资源管理方式

目录 1. 说明2. 命令式对象管理3. 命令式对象配置4. 声明式对象配置5. 三种方式的对比 1. 说明 1.在Kubernetes&#xff08;k8s&#xff09;中&#xff0c;资源管理是一个核心功能&#xff0c;它允许用户通过操作资源来管理Kubernetes集群。2.Kubernetes将所有的内容都抽象为资…...

chromedriver可运行的docker环境

以常见的linux x86服务器为例 chrome driver 官网&#xff1a;https://googlechromelabs.github.io/chrome-for-testing/ 下载chrome linux64位&#xff1a;https://storage.googleapis.com/chrome-for-testing-public/131.0.6778.85/xxx 下载chrome driver linux64位&#x…...

【YashanDB知识库】如何将mysql含有group by的SQL转换成崖山支持的SQL

本文内容来自YashanDB官网&#xff0c;原文内容请见 https://www.yashandb.com/newsinfo/7610112.html?templateId1718516 问题现象 以下SQL在MYSQL下均能执行成功&#xff0c;在崖山下执行报错。 SELECT Sname,Ssex, min(Sage) FROM Student group by Ssex;SELECT Sname,c…...

希迪智驾持续亏损8.2亿:毛利率下滑,冲刺“自动驾驶矿卡第一股”

《港湾商业观察》黄懿 近日&#xff0c;希迪智驾&#xff08;湖南&#xff09;股份有限公司&#xff08;下称“希迪智驾”&#xff09;向港交所主板递交上市申请&#xff0c;联席保荐人为中金公司、中信建投国际、中国平安资本&#xff08;香港&#xff09;。 资料显示&#…...

部署GitLab服务器

文章目录 环境准备GitLab部署GitLab服务器GitLab中主要的概念客户端上传代码到gitlab服务器CI-CD概述软件程序上线流程安装Jenkins服务器 配置jenkins软件版本管理配置jenkins访问gitlab远程仓库下载到子目录部署代码到web服务器自动化部署流程 配置共享服务器配置jenkins把git…...

利用cnocr库完成中文扫描pdf文件的文字识别

很多pdf文件文字识别软件都会收费&#xff0c;免费的网页版可能会带来信息泄露&#xff0c;还有一些类似于腾讯AI和百度AI的接口都有调用次数限制&#xff0c;因此&#xff0c;利用识别正确率极高且免费的cnocr库来自己动手做个pdf文件文字识别程序就是一个很不错的选择。以下程…...

pythonselenium自动化初始配置

基础配置 更新pip: 在Terminal中使用命令‘python -m pip install --upgrade pip’就可以安装pip最新版本。 python -m pip install --upgrade pip -i https://pypi.tuna.tsinghua.edu.cn/simple 常用的镜像源&#xff1a; 清华: https://pypi.tuna.tsinghua.edu.cn/simpl…...

【C++】数的性质问题分析与优化

博客主页&#xff1a; [小ᶻ☡꙳ᵃⁱᵍᶜ꙳] 本文专栏: C 文章目录 &#x1f4af;前言&#x1f4af;题目解析与分析题目描述题目分析 &#x1f4af;我的解法与详细解读初始代码实现解法分析 &#x1f4af;老师解法与其改进思路老师代码实现改进与优势 &#x1f4af;对比分析…...

ASP.NET Core WebAPI中使用Jwt实现鉴权授权-System.IdentityModel.Tokens.Jwt

使用 System.IdentityModel.Tokens.Jwt 直接实现基于 JWT 的鉴权和授权&#xff0c;可以在 ASP.NET Core 中手动生成、解析、验证 JWT Token。System.IdentityModel.Tokens.Jwt 提供了 JWT 的生成和解析的 API。以下是如何使用该库实现鉴权授权的详细步骤。 步骤 1: 安装 NuGe…...

【iOS】OC高级编程 iOS多线程与内存管理阅读笔记——自动引用计数(四)

目录 ARC规则 规则 对象型变量不能作为C语言结构体的成员 显式转换id和void* 属性 数组 ARC规则 规则 在ARC有效的情况下编译源代码必须遵守一定的规则&#xff1a; 主要解释一下最后两条 对象型变量不能作为C语言结构体的成员 要把对象型变量加入到结构体成员中时&a…...

JwChat避坑指南:Vue聊天组件这些隐藏配置能让体验提升200%

JwChat深度优化实战&#xff1a;解锁Vue聊天组件200%体验升级的隐藏技巧 当你已经用JwChat实现了基础聊天功能&#xff0c;却发现消息列表卡顿、表情包显示错位、历史加载闪烁——这些细节问题正在蚕食用户体验。作为基于Vue的轻量级聊天组件&#xff0c;JwChat的官方文档并未揭…...

内存占用直降68%?揭秘头部金融科技公司Python服务的成本控制策略,含可落地的12个代码级优化checklist

第一章&#xff1a;Python 智能体内存管理策略Python 的内存管理并非由开发者手动控制&#xff0c;而是通过一套高度自动化的智能体机制协同运作&#xff0c;核心包括引用计数、循环垃圾回收器&#xff08;gc 模块&#xff09;和内存池&#xff08;pymalloc&#xff09;三层结构…...

OpenClaw多模态技能开发:为Phi-3-vision-128k-instruct增加PDF图表提取功能

OpenClaw多模态技能开发&#xff1a;为Phi-3-vision-128k-instruct增加PDF图表提取功能 1. 为什么需要PDF图表提取能力 上周我在研究一份技术白皮书时遇到了典型痛点——PDF里那些精美的架构图和流程图无法直接复制使用。手动截图再粘贴到文档里不仅效率低下&#xff0c;更重…...

OpenClaw压力测试:Qwen3-14B在并发请求下的响应延迟分析

OpenClaw压力测试&#xff1a;Qwen3-14B在并发请求下的响应延迟分析 1. 测试背景与目标 上周在部署OpenClaw对接本地Qwen3-14B模型时&#xff0c;遇到一个实际问题&#xff1a;当我同时触发多个自动化任务时&#xff0c;系统响应明显变慢&#xff0c;甚至偶尔会出现任务失败。…...

【C++27范围库前瞻实战指南】:20年标准库专家亲授5大扩展接口的工业级应用模式

第一章&#xff1a;C27范围库扩展全景概览C27 将对标准范围库&#xff08;Ranges&#xff09;进行实质性增强&#xff0c;聚焦于提升表达力、运行时效率与编译期元编程能力。核心演进方向包括惰性求值语义强化、范围适配器的定制化组合机制、对异步与并行范围操作的原生支持&am…...

思维重构:三月七小助手如何重新定义星穹铁道游戏体验

思维重构&#xff1a;三月七小助手如何重新定义星穹铁道游戏体验 【免费下载链接】March7thAssistant 崩坏&#xff1a;星穹铁道全自动 三月七小助手 项目地址: https://gitcode.com/gh_mirrors/ma/March7thAssistant 在《崩坏&#xff1a;星穹铁道》的世界里&#xff0…...

论文写作“智多星”:书匠策AI,开启期刊论文新纪元

在学术的广袤天地里&#xff0c;论文写作宛如一场充满挑战的冒险之旅。尤其是期刊论文&#xff0c;它不仅是学者研究成果的集中展现&#xff0c;更是学术交流与进步的重要桥梁。但面对选题迷茫、资料繁杂、结构搭建困难等诸多难题&#xff0c;许多学者常常感到力不从心。别担心…...

Azure IoT Hub AMQP传输层深度解析与嵌入式实践

1. Azure IoT Hub AMQP 传输层技术深度解析Azure IoT Hub 是微软面向物联网场景构建的高可靠、可扩展云平台&#xff0c;其核心能力依赖于多种协议栈的协同支持。在众多通信协议中&#xff0c;AMQP&#xff08;Advanced Message Queuing Protocol&#xff09;因其固有的消息可靠…...

arduino新手福音:在快马平台零基础点亮第一盏led灯

作为一个刚接触Arduino的小白&#xff0c;最近在尝试点亮人生第一盏LED灯时&#xff0c;发现传统方式需要下载IDE、配置驱动、研究接线图&#xff0c;光是环境搭建就劝退了不少人。直到遇到InsCode(快马)平台&#xff0c;才发现原来入门可以这么简单——不用安装任何软件&#…...

P1163 银行贷款 总结与反思

提炼以下几点&#xff1a;1&#xff0c;问&#xff1a;C中 整型怎么转浮点数&#xff08;int/ long long to double):答&#xff1a;直接赋值即可&#xff0c; eg ll N; double a N;2, 问&#xff1a;C中整型和浮点数怎么做加减法答&#xff1a;直接加减即可&#xff0c;自…...