OSG粒子系统特效-----雨雪、爆炸、烟雾

news2025/1/14 20:30:35

1、烟雾效果

飞机坠毁飞机坠毁
在这里插入图片描述
陨石坠落

源码:

// CMyOSGParticle.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//

#include <iostream>
#include <windows.h>
#include <osgViewer/Viewer>

#include <osg/Node>
#include <osg/Geode>
#include <osg/Geometry>
#include <osg/Group>
#include <osg/Billboard>
#include <osg/Texture2D>
#include <osg/Image>
#include <osg/Vec3>
#include <osg/Vec2>
#include <osg/PositionAttitudeTransform>
#include <osg/MatrixTransform>
#include <osgDB/ReadFile>
#include <osgDB/WriteFile>
#include <osgUtil/Optimizer>

#include <osgViewer/ViewerEventHandlers> //事件监听
#include <osgGA/StateSetManipulator> //事件响应类,对渲染状态进行控制
#include <osgUtil/Simplifier> //简化几何体

#include <osgParticle/PrecipitationEffect>
#include <osgParticle/Particle>

#include <osgParticle/LinearInterpolator>
#include <osgParticle/ParticleSystem>
#include < osgParticle/RandomRateCounter>
#include <osgParticle/PointPlacer>
#include <osgParticle/RadialShooter>
#include <osgParticle/ModularEmitter>
#include <osgParticle/ParticleSystemUpdater>
#include < osgParticle/ModularProgram>


#pragma comment(lib, "OpenThreadsd.lib")
#pragma comment(lib, "osgd.lib")
#pragma comment(lib, "osgDBd.lib")
#pragma comment(lib, "osgUtild.lib")
#pragma comment(lib, "osgGAd.lib")
#pragma comment(lib, "osgViewerd.lib")
#pragma comment(lib, "osgTextd.lib")
#pragma comment(lib, "osgParticled.lib")

//创建火球(燃烧)
void createFireBall(osg::MatrixTransform* smokeNode)
{
	// 创建粒子对象,设置其属性并交由粒子系统使用。
	osgParticle::Particle particleTempalte;
	particleTempalte.setShape(osgParticle::Particle::QUAD);
	particleTempalte.setLifeTime(1.5); // 单位:秒
	particleTempalte.setSizeRange(osgParticle::rangef(3.0f, 1.0f)); // 单位:米
	particleTempalte.setAlphaRange(osgParticle::rangef(1, 0));
	particleTempalte.setColorRange(osgParticle::rangev4(osg::Vec4(1.0f, 0.2f, 0.0f, 1.0f),//0.1f,0.3f,0.4f,1.0f
		osg::Vec4(0.1f, 0.1f, 0.1f, 0)//0.95f,0.75f,0,1(1,1,1,1)
	));
	particleTempalte.setPosition(osg::Vec3(0.0f, 0.0f, 0.0f));
	particleTempalte.setVelocity(osg::Vec3(0.0f, 0.0f, 0.0f));
	particleTempalte.setMass(0.1f); //单位:千克
	particleTempalte.setRadius(0.2f);
	particleTempalte.setSizeInterpolator(new osgParticle::LinearInterpolator);
	particleTempalte.setAlphaInterpolator(new osgParticle::LinearInterpolator);
	particleTempalte.setColorInterpolator(new osgParticle::LinearInterpolator);
	// 创建并初始化粒子系统。
	osgParticle::ParticleSystem* particleSystem = new osgParticle::ParticleSystem;
	particleSystem->setDataVariance(osg::Node::STATIC);
	// 设置材质,是否放射粒子,以及是否使用光照。
	particleSystem->setDefaultAttributes("D:\\data\\Images\\smoke.rgb", true, false);
	osg::Geode* geode = new osg::Geode;
	geode->addDrawable(particleSystem);
	smokeNode->addChild(geode);
	//设置为粒子系统的缺省粒子对象。
	particleSystem->setDefaultParticleTemplate(particleTempalte);
	//获取放射极中缺省计数器的句柄,调整每帧增加的新粒子数目
	osgParticle::RandomRateCounter* particleGenerateRate = new osgParticle::RandomRateCounter();
	particleGenerateRate->setRateRange(30, 50);
	// 每秒新生成的粒子范围
	particleGenerateRate->setDataVariance(osg::Node::DYNAMIC);
	// 自定义一个放置器,这里创建并初始化一个点放置器
	osgParticle::PointPlacer* particlePlacer = new osgParticle::PointPlacer;
	particlePlacer->setCenter(osg::Vec3(0.0f, 0.0f, 0.0f));
	particlePlacer->setDataVariance(osg::Node::DYNAMIC);
	// 自定义一个弧度发射器
	osgParticle::RadialShooter* particleShooter = new osgParticle::RadialShooter;
	// 设置发射器的属性
	particleShooter->setDataVariance(osg::Node::DYNAMIC);
	particleShooter->setThetaRange(-0.1f, 0.1f);
	// 弧度值,与Z 轴夹角
	particleShooter->setPhiRange(-0.1f, 0.1f);
	particleShooter->setInitialSpeedRange(5, 7.5f);//单位:米/秒
												   //创建标准放射极对象
	osgParticle::ModularEmitter* emitter = new osgParticle::ModularEmitter;
	emitter->setDataVariance(osg::Node::DYNAMIC);
	emitter->setCullingActive(false);
	// 将放射极对象与粒子系统关联。
	emitter->setParticleSystem(particleSystem);
	// 设置计数器
	emitter->setCounter(particleGenerateRate);
	// 设置放置器
	emitter->setPlacer(particlePlacer);
	// 设置发射器
	emitter->setShooter(particleShooter);
	// 把放射极添加为变换节点
	smokeNode->addChild(emitter);
	// 添加更新器,以实现每帧的粒子管理。
	osgParticle::ParticleSystemUpdater* particleSystemUpdater = new osgParticle::ParticleSystemUpdater;
	// 将更新器与粒子系统对象关联。
	particleSystemUpdater->addParticleSystem(particleSystem);
	// 将更新器节点添加到场景中。
	smokeNode->addChild(particleSystemUpdater);
	// 创建标准编程器对象并与粒子系统相关联。
	osgParticle::ModularProgram* particleMoveProgram = new osgParticle::ModularProgram;
	particleMoveProgram->setParticleSystem(particleSystem);
	// 最后,将编程器添加到场景中。
	smokeNode->addChild(particleMoveProgram);
}

//创建浓烟
void createDarkSmoke(osg::MatrixTransform* smokeNode)
{
	// 创建粒子对象,设置其属性并交由粒子系统使用。
	osgParticle::Particle particleTempalte;
	particleTempalte.setShape(osgParticle::Particle::QUAD);
	particleTempalte.setLifeTime(10); // 单位:秒
	particleTempalte.setSizeRange(osgParticle::rangef(1.0f, 12.0f)); // 单位:米
	particleTempalte.setAlphaRange(osgParticle::rangef(1, 0));
	particleTempalte.setColorRange(osgParticle::rangev4(
		osg::Vec4(0.0f, 0.0f, 0.0f, 0.5f),//(0.1f,0.1f,0.1f,0.5f)
		osg::Vec4(0.5f, 0.5f, 0.5f, 1.5f)//0.95f,0.75f,0,1
	));
	particleTempalte.setPosition(osg::Vec3(0.0f, 0.0f, 0.0f));
	particleTempalte.setVelocity(osg::Vec3(0.0f, 0.0f, 0.0f));
	particleTempalte.setMass(0.1f); //单位:千克
	particleTempalte.setRadius(0.2f);
	particleTempalte.setSizeInterpolator(new osgParticle::LinearInterpolator);
	particleTempalte.setAlphaInterpolator(new osgParticle::LinearInterpolator);
	particleTempalte.setColorInterpolator(new osgParticle::LinearInterpolator);
	// 创建并初始化粒子系统。
	osgParticle::ParticleSystem* particleSystem = new osgParticle::ParticleSystem;
	particleSystem->setDataVariance(osg::Node::STATIC);
	// 设置材质,是否放射粒子,以及是否使用光照。
	particleSystem->setDefaultAttributes("D:\\data\\Images\\smoke.rgb", false, false);
	osg::Geode* geode = new osg::Geode;
	geode->addDrawable(particleSystem);
	smokeNode->addChild(geode);
	//设置为粒子系统的缺省粒子对象。
	particleSystem->setDefaultParticleTemplate(particleTempalte);
	//获取放射极中缺省计数器的句柄,调整每帧增加的新粒
	//子数目
	osgParticle::RandomRateCounter* particleGenerateRate = new osgParticle::RandomRateCounter();
	particleGenerateRate->setRateRange(30, 50);
	// 每秒新生成的粒子范围
	particleGenerateRate->setDataVariance(osg::Node::DYNAMIC);
	// 自定义一个放置器,这里我们创建并初始化一个点放置器
	osgParticle::PointPlacer* particlePlacer = new osgParticle::PointPlacer;
	particlePlacer->setCenter(osg::Vec3(0.0f, 0.0f, 0.05f));
	particlePlacer->setDataVariance(osg::Node::DYNAMIC);
	// 自定义一个弧度发射器
	osgParticle::RadialShooter* particleShooter = new osgParticle::RadialShooter;
	// 设置发射器的属性
	particleShooter->setDataVariance(osg::Node::DYNAMIC);
	particleShooter->setThetaRange(-0.1f, 0.1f);
	// 弧度值,与Z 轴夹角0.392699f
	particleShooter->setPhiRange(-0.1f, 0.1f);
	particleShooter->setInitialSpeedRange(10, 15);
	//单位:米/秒
	//创建标准放射极对象
	osgParticle::ModularEmitter* emitter = new osgParticle::
		ModularEmitter;
	emitter->setDataVariance(osg::Node::DYNAMIC);
	emitter->setCullingActive(false);
	// 将放射极对象与粒子系统关联。
	emitter->setParticleSystem(particleSystem);
	// 设置计数器
	emitter->setCounter(particleGenerateRate);
	// 设置放置器
	emitter->setPlacer(particlePlacer);
	// 设置发射器
	emitter->setShooter(particleShooter);
	// 把放射极添加为变换节点
	smokeNode->addChild(emitter);
	// 添加更新器,以实现每帧的粒子管理。
	osgParticle::ParticleSystemUpdater* particleSystemUpdater = new osgParticle::ParticleSystemUpdater;
	// 将更新器与粒子系统对象关联。
	particleSystemUpdater->addParticleSystem(particleSystem);
	// 将更新器节点添加到场景中。
	smokeNode->addChild(particleSystemUpdater);
	osgParticle::ModularProgram* particleMoveProgram = new osgParticle::ModularProgram;
	particleMoveProgram->setParticleSystem(particleSystem);
	// 最后,将编程器添加到场景中。
	smokeNode->addChild(particleMoveProgram);
}

void WriteFireballAndSmoke()
{
	osg::ref_ptr<osg::Group> root = new osg::Group();
	osg::MatrixTransform* flightTransform = new osg::MatrixTransform();
	root->addChild(flightTransform);
	//引擎烟雾
	osg::MatrixTransform* fireballAndSmoke = new osg::MatrixTransform();
	createFireBall(fireballAndSmoke);

	fireballAndSmoke->setMatrix(osg::Matrix::rotate(-osg::PI / 2, 1, 0, 0) * osg::Matrix::translate(-8, -10, -3));
	flightTransform->addChild(fireballAndSmoke);
	createDarkSmoke(fireballAndSmoke);

	osgDB::writeNodeFile(*(root.get()), "D:\\data\\Images\\MyScene.osg");
}

void ReadFireballAndSmoke()
{
	osg::ref_ptr<osg::Group> root = new osg::Group();
	osg::Node* flightNode = osgDB::readNodeFile("D:\\data\\Images\\MyScene.osg");
	if (!flightNode)
	{
		return;
	}
	osg::MatrixTransform* flightTransform = new osg::MatrixTransform();
	flightTransform->addChild(flightNode);
	root->addChild(flightTransform);
	osgViewer::Viewer viewer;

	osgUtil::Simplifier simplifier(0.3f, 4.0f);
	osgUtil::Optimizer optimzer;

	optimzer.optimize(root.get());
	viewer.setSceneData(root.get());

	//添加一个事件句柄 相当于添加一个响应 响应鼠标或是键盘 响应L键(控制灯光开关)
	viewer.addEventHandler(new osgGA::StateSetManipulator(viewer.getCamera()->getOrCreateStateSet()));

	//窗口大小变化事件 添加窗口大小改变的句柄 这里响应的是F键
	viewer.addEventHandler(new osgViewer::WindowSizeHandler);

	//添加一些常用状态设置  添加常用的状态操作,这里会响应S键、W键等等 
	viewer.addEventHandler(new osgViewer::StatsHandler);
	viewer.realize();
	viewer.run();
}

//陨石坠落
//int main()
//{
//	WriteFireballAndSmoke();
//	ReadFireballAndSmoke();
//
//	return 0;
//}

int main()
{
	osg::ref_ptr<osg::Group> root = new osg::Group();
	osg::Node* flightNode = osgDB::readNodeFile("D:\\data\\cessna.osgt");//需要经模型放在项目根目录下(而不是在cpp所在目录)
	if (!flightNode)
	{
		return -1;
	}
	//飞机变换节点
	osg::MatrixTransform* flightTransform = new osg::MatrixTransform();
	flightTransform->addChild(flightNode);
	root->addChild(flightTransform);
	//引擎烟雾
	osg::MatrixTransform* fireballAndSmoke = new osg::MatrixTransform();
	createFireBall(fireballAndSmoke);

	fireballAndSmoke->setMatrix(osg::Matrix::rotate(-osg::PI / 2, 1, 0, 0) * osg::Matrix::translate(-8, -10, -3));
	flightTransform->addChild(fireballAndSmoke);
	createDarkSmoke(fireballAndSmoke);
	osgViewer::Viewer viewer;

	osgUtil::Simplifier simplifier(0.3f, 4.0f);
	osgUtil::Optimizer optimzer;

	optimzer.optimize(root.get());
	viewer.setSceneData(root.get());

	//添加一个事件句柄 相当于添加一个响应 响应鼠标或是键盘 响应L键(控制灯光开关)
	viewer.addEventHandler(new osgGA::StateSetManipulator(viewer.getCamera()->getOrCreateStateSet()));

	//窗口大小变化事件 添加窗口大小改变的句柄 这里响应的是F键
	viewer.addEventHandler(new osgViewer::WindowSizeHandler);

	//添加一些常用状态设置  添加常用的状态操作,这里会响应S键、W键等等 
	viewer.addEventHandler(new osgViewer::StatsHandler);

	viewer.realize();
	viewer.run();

	return 0;
}

2、爆炸效果

#include <osgParticle/ExplosionDebrisEffect>
#include <osgParticle/ExplosionEffect>
#include <osgParticle/SmokeEffect>
#include <osgParticle/FireEffect>
#include <osgUtil/Optimizer>

//创建爆炸效果
osg::ref_ptr<osg::Node> createExplode()
{
	osg::ref_ptr<osg::Group> explode = new osg::Group();
	//风向
	osg::Vec3 wind(1.0f, 0.0f, 0.0f);
	osg::Vec3 position(0.0f, 0.0f, -1.0f);
	//爆炸模拟,10.0f为缩放比,默认为1.0f,不缩放
	osg::ref_ptr<osgParticle::ExplosionEffect> explosion = new osgParticle::ExplosionEffect(position, 10.0f);
	osg::ref_ptr<osgParticle::ExplosionDebrisEffect> explosionDebri =
		new osgParticle::ExplosionDebrisEffect(position, 10.0f);
	//烟模拟
	osg::ref_ptr<osgParticle::SmokeEffect> smoke = new osgParticle::SmokeEffect(position, 10.0f);
	//火焰模拟
	osg::ref_ptr<osgParticle::FireEffect> fire = new osgParticle::FireEffect(position, 10.0f);
	//设置风向
	explosion->setWind(wind);
	explosionDebri->setWind(wind);
	smoke->setWind(wind);
	fire->setWind(wind);

	//添加子节点
	explode->addChild(explosion.get());
	explode->addChild(explosionDebri.get());
	explode->addChild(smoke.get());
	explode->addChild(fire.get());
	return explode.get();
}

int main()
{
	osg::ref_ptr<osgViewer::Viewer> viewer = new osgViewer::Viewer();
	osg::ref_ptr<osg::Group> root = new osg::Group();
	//添加爆炸效果
	root->addChild(createExplode());
	//优化场景数据
	osgUtil::Optimizer optimizer;
	optimizer.optimize(root.get());
	//设置场景数据
	viewer->setSceneData(root.get());
	//初始化并创建窗口
	viewer->realize();
	//viewer->setUpViewInWindow(200, 200, 800, 800);
	viewer->run();
}

3、雨雪效果

在这里插入图片描述
源码:

#include <osgParticle/PrecipitationEffect>
void main() 
{
	osgViewer::Viewer viewer;

	//设置雪花类
	osg::ref_ptr<osgParticle::PrecipitationEffect> precipitationEffect = new osgParticle::PrecipitationEffect;

	//设置雪花浓度
	precipitationEffect->snow(0.5);

	//设置雪花颜色 
	precipitationEffect->setParticleColor(osg::Vec4(1, 1, 1, 1));

	//设置风向
	precipitationEffect->setWind(osg::Vec3(2, 0, 0));

	osg::ref_ptr <osg::Group> pRoot = new osg::Group();

	//把雪花加入到场景结点
	pRoot->addChild(precipitationEffect.get());
	osg::ref_ptr<osg::Node> glider = osgDB::readNodeFile("D:\\data\\cessna.osgt");
	pRoot->addChild(glider.get());
	viewer.setSceneData(pRoot);

	//添加一个事件句柄 相当于添加一个响应 响应鼠标或是键盘 响应L键(控制灯光开关)
	viewer.addEventHandler(new osgGA::StateSetManipulator(viewer.getCamera()->getOrCreateStateSet()));

	//窗口大小变化事件 添加窗口大小改变的句柄 这里响应的是F键
	viewer.addEventHandler(new osgViewer::WindowSizeHandler);

	//添加一些常用状态设置  添加常用的状态操作,这里会响应S键、W键等等 
	viewer.addEventHandler(new osgViewer::StatsHandler);

	viewer.realize();
	viewer.run();
}

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

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

相关文章

动态规划:从入门到入土系列(二)

&#x1f388;个人主页:&#x1f388; :✨✨✨初阶牛✨✨✨ &#x1f43b;推荐专栏1: &#x1f354;&#x1f35f;&#x1f32f;C语言初阶 &#x1f43b;推荐专栏2: &#x1f354;&#x1f35f;&#x1f32f;C语言进阶 &#x1f511;个人信条: &#x1f335;知行合一 前言 一、…

AI AIgents时代-(五.)Autogen

由微软开发的 Autogen 是一个新的 Agents 项目&#xff0c;刚一上线就登上GitHub热榜&#xff0c;狂揽11k星✨✨✨ 项目地址&#xff1a;https://github.com/microsoft/autogen Autogen 允许你根据需要创建任意数量的Agents&#xff0c;并让它们协同工作以执行任务。它的独特之…

LeetCode算法栈—有效的括号

目录 有效的括号 用到的数据结构&#xff1a; 位运算、Map 和 Stack Stack 常用的函数&#xff1a; 题解&#xff1a; 代码&#xff1a; 运行结果; 给定一个只包括 (&#xff0c;)&#xff0c;{&#xff0c;}&#xff0c;[&#xff0c;] 的字符串 s &#xff0c;判断字符…

SpringBoot2.x简单集成Flowable

环境和版本 window10 java1.8 mysql8 flowable6 springboot 2.7.6 配置 使用IDEA创建一个SpringBoot项目 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.…

GitHub下载太慢的解决方案

修改hosts文件&#xff1a; windows的hosts文件在 C:\Windows\System32\drivers\etc\hosts cmd管理员运行命令notepad C:\Windows\System32\drivers\etc\hosts 然后cmd命令重启网络ipconfig /flushdns windows修改hosts Ubuntu22.04修改hosts sudo vim /etc/hosts # This fil…

RK3288 Android11 mini-pcie接口 4G模组EC200A适配(含自适应功能)

这里写目录标题 1、修改驱动内核配置①使能USBNET功能②使能 USB 串口 GSM、CDMA 驱动③使能 USB 的 CDC ACM模式④使能PPP功能 2、使用lsusb命令查看是否识别到usb接口的“EC200A”4G模组3、在drivers/usb/serial/option.c添加VID和PID信息①添加VID和PID定义②在option_ids 数…

找寻openSUSE的前世今生

找寻开始的地方 在一些资产管理平台、网管系统&#xff0c;完全依赖资产录入资产&#xff0c;假如存在SUSE类型网元&#xff0c;能否将SLES和openSUSE一同接入到SUSE类型下&#xff0c;就有待商榷了。 SLES和openSUSE是两个不同的Linux发行版&#xff0c;更准确说是两个不同的…

基于PHP的蛋糕甜品商店管理系统设计与实现(源码+lw+部署文档+讲解等)

文章目录 前言具体实现截图论文参考详细视频演示为什么选择我自己的网站自己的小程序&#xff08;小蔡coding&#xff09; 代码参考数据库参考源码获取 前言 &#x1f497;博主介绍&#xff1a;✌全网粉丝10W,CSDN特邀作者、博客专家、CSDN新星计划导师、全栈领域优质创作者&am…

python读写.pptx文件

1、读取PPT import pptx pptpptx.Presentation(rC:\Users\user\Documents\\2.pptx) # ppt.save(rC:\Users\user\Documents\\1.pptx) # slideppt.slides.add_slide(ppt.slide_layouts[1])# 读取所有幻灯片上的文字 for slide in ppt.slides:for shape in slide.shapes:if shape…

[尚硅谷React笔记]——第4章 React ajax

目录&#xff1a; 脚手架配置代理_方法一 server1.js开启服务器server1:App.js解决跨域问题&#xff1a;脚手架配置代理_方法二 ​​​​​​​server2.js开启服务器server2第一步&#xff1a;创建代理配置文件编写setupProxy.js配置具体代理规则&#xff1a;App.js运行结果&a…

js实现红包雨功能(canvas,react,ts),包括图片不规则旋转、大小、转速、掉落速度控制、屏幕最大红包数量控制等功能

介绍 本文功能由canvas实现红包雨功能&#xff08;index.tsx&#xff09;本文为react的ts版。如有其他版本需求可评论区观赏地址&#xff0c;需过墙 import React, { Component } from react; // import ./index.css; import moneyx from /assets/images/RedEnvelopeRain/bal…

SEO业务适合什么代理IP?2023海外代理IP推荐排名

随着数字营销趋势的变化&#xff0c;搜索引擎优化仍然是企业在网络世界中努力繁荣的重要组成部分。为了实现 SEO 成功&#xff0c;从搜索引擎获取准确且多样化的数据至关重要&#xff0c;然而可能会受到诸如基于位置的限制和被检测风险等限制的阻碍&#xff0c;IP代理则可以帮助…

百度开源分布式id生成器集成--真香警告

百度开源分布式id生成器集成–真香警告 文章目录 [toc] 1.为什么需要分布式id生成器&#xff1f;2.常见id生成方案2.1 数据库表主键自增2.2 uuid2.3 雪花算法2.3.1 实现代码2.3.2 缺点的解决方案百度开源的分布式唯一ID生成器UidGenerator(本文重点讲解这个)Leaf--美团点评分布…

gnome-terminal禁止关闭确认

当你想要关闭一个终端时&#xff0c;弹出“确认关闭&#xff1f;”多少有些烦。 比如当前为root下&#xff0c;要么一路exit&#xff0c;要么就点击确认&#xff1a; 解决方法&#xff1a; 安装一个配置编辑器来帮我们方便地编辑配置项 sudo apt install dconf-editor找到…

小程序搭建OA项目首页布局界面

首先让我们来学习以下Flex布局 一&#xff0c;Flex布局简介 布局的传统解决方案&#xff0c;基于盒状模型&#xff0c;依赖 display属性 position属性 float属性 Flex布局简介 Flex是Flexible Box的缩写&#xff0c;意为”弹性布局”&#xff0c;用来为盒状模型提供最大的…

tomcat、nginx实现四层转发+七层代理+动静分离实验

实验环境&#xff1a; nginx1——20.0.0.11——客户端 静态页面&#xff1a; nginx2——20.0.0.21——代理服务器1 nginx3——20.0.0.31——代理服务器2 动态页面&#xff1a; tomcat1——20.0.0.12——后端服务器1 tomcat2——20.0.0.22——后端服务器2 实验步骤&…

什么是4K三路虚拟情景互动教学软件?

4K三路虚拟情景互动教学软件具备了AI对话&#xff0c;场景库丰富自定义选择&#xff0c;画面色差调节&#xff0c;人物滤镜调节&#xff0c;截图编辑&#xff0c;视频录制与编辑&#xff0c;视频直播&#xff0c;画中画控制功能&#xff0c;字幕&#xff0c;图片和特效录入功能…

sqlmap --os-shell选项原理解析

文章目录 sqlmap --os-shell选项原理解析原理解析总结 sqlmap --os-shell选项原理解析 以sqli第一关为例。 --os-shell 是 SQLMap 工具的一个参数&#xff0c;用于在成功注入数据库后&#xff0c;执行操作系统命令并获取其输出。 sqlmap -u "http://192.168.188.199/sq…

学信息系统项目管理师第4版系列31_信息系统工程

1. 信息系统战略三角突出了业务战略、信息系统和组织机制之间的必要一致性 1.1. 【高23上选07】 2. 软件工程 2.1. 软件工程方法是完成软件工程项目的技术手段&#xff0c;它支持整个软件生命周期 2.2. 软件工程使用的工具是人们在开发软件的活动中智力和体力的扩展与延伸 …

React合成事件

一、合成事件 event 是 SyntheticEvent &#xff0c;模拟出来 DOM 事件所有能力 event.nativeEvent 是原生事件对象 所有的事件&#xff0c;都被挂载到 document 上&#xff08;React ≤ 16&#xff09;&#xff0c;React17之后是挂载到root组件 和 DOM 事件不一样&#xff…