首页 > 其他分享 >osgearth仿真平台之特效(4)

osgearth仿真平台之特效(4)

时间:2022-11-20 19:13:34浏览次数:46  
标签:仿真 特效 color back osgearth geom push StateAttribute osg

osgearth特效主要是开发了圆锥波、菱形波、干扰、通信、爆炸等特效,因为特效开发起来比较麻烦,有时候在osg上效果很好,放到osgearth上效果就不行了,特效如下:

卫星轨道的添加:

 

 

 

爆炸效果的添加:

 

 

 

波束等效果的添加:

 

 

 

扫描波束:

void CScan::Init()
{
this->getOrCreateStateSet()->setMode(GL_BLEND, osg::StateAttribute::ON | osg::StateAttribute::PROTECTED | osg::StateAttribute::OVERRIDE);
this->getOrCreateStateSet()->setMode(GL_LIGHTING, osg::StateAttribute::OFF | osg::StateAttribute::PROTECTED | osg::StateAttribute::OVERRIDE);
osg::Depth* dp = new osg::Depth();
dp->setWriteMask(false);
this->getOrCreateStateSet()->setAttribute(dp, osg::StateAttribute::ON | osg::StateAttribute::PROTECTED | osg::StateAttribute::OVERRIDE);

m_gnode = new osg::Geode;
addChild(m_gnode);

m_rpDrawCallback = new DrawableDrawCallback(m_pos);

m_geom = new osg::Geometry;
m_gnode->addDrawable(m_geom);
m_geom->setDrawCallback(m_rpDrawCallback);
m_geom->setUseDisplayList(false);
m_geom->setUseVertexBufferObjects(true);

//顶点序列
osg::Vec3dArray* vertex = new osg::Vec3dArray;
m_geom->setVertexArray(vertex);

//颜色序列
osg::Vec4dArray* colorArray = new osg::Vec4dArray;
m_geom->setColorArray(colorArray);
m_geom->setColorBinding(osg::Geometry::BIND_PER_VERTEX);

//勾边,循环线
osg::DrawElementsUInt* edge = new osg::DrawElementsUInt(GL_LINE_LOOP);
//m_geom->addPrimitiveSet(edge);
/// 不能使用索引构造边框线, 因为在绘制更新时清空了节点,导致其他地方遍历DrawElementsUInt时出错。(2017.4.12 g00034)

//顶点设置,首先求出除卫星点,地球中心点之外的第三个点
osg::Vec3d thirdPos = osg::Matrix(osg::Matrix::translate(m_pos) * osg::Matrix::rotate(osg::inDegrees(50.0), osg::Vec3d(1.0, 0.0, 0.0))).getTrans() - m_pos;

//勾边,三个点
{
vertex->push_back(m_pos);
edge->push_back(0);
colorArray->push_back(m_color);
vertex->push_back(osg::Vec3d(0.0, 0.0, 0.0));
edge->push_back(1);
colorArray->push_back(m_color);
vertex->push_back(thirdPos);
edge->push_back(2);
colorArray->push_back(m_color);

m_geom->addPrimitiveSet(new osg::DrawArrays(GL_LINE_LOOP, 0, vertex->size()));
}

//开始中间分段,着色
{
osg::Vec3d center = osg::Vec3d(0.0, 0.0, 0.0);
osg::Vec3d right = thirdPos;
float deltaRadio = 0.01;

//四个形状
osg::Vec3d m0, m1, m2, m3;

//起初m0和m2为起点
m0 = m_pos;
m2 = m_pos;

float deltaAlpha = 0.01;
float m02Alaph = 0.01;
float m13Alpha = m02Alaph + deltaAlpha;

for(float radio = deltaRadio; radio<1.0; radio+=deltaRadio)
{
//求出左中心
m1 = m_pos + (center - m_pos) * radio;
m3 = m_pos + (right - m_pos) * radio;

m_geom->addPrimitiveSet(new osg::DrawArrays(GL_TRIANGLE_STRIP, vertex->size(), 4));

vertex->push_back(m0);
colorArray->push_back(osg::Vec4d(m_color.r(), m_color.g(), m_color.b(), m02Alaph));

vertex->push_back(m1);
colorArray->push_back(osg::Vec4d(m_color.r(), m_color.g(), m_color.b(), m13Alpha));

vertex->push_back(m2);
colorArray->push_back(osg::Vec4d(m_color.r(), m_color.g(), m_color.b(), m02Alaph));

vertex->push_back(m3);
colorArray->push_back(osg::Vec4d(m_color.r(), m_color.g(), m_color.b(), m13Alpha));

m0 = m1;
//float temp = m02Alaph;
m02Alaph = m13Alpha;
m2 = m3;
m13Alpha += deltaAlpha;

if(m13Alpha>0.3)
{
deltaAlpha = -0.04;
}

if(m13Alpha<0.01)
{
deltaAlpha = 0.01;
}

if(m13Alpha <0.0) m13Alpha = 0.0;
}

}

}
爆炸:

osg::ref_ptr<osg::Node> SimEffect::Explosion::createExp()
{
osg::AutoTransform* at = new osg::AutoTransform;
osg::Group* exRoot = new osg::Group;
exRoot->setName("Explosion");
osg::ref_ptr<osg::Node>ex = createEffect(200.0);
exRoot->addChild(ex);
//ex->setNodeMask(1);

at->addChild(exRoot);
at->getOrCreateStateSet()->setMode(GL_LIGHTING, osg::StateAttribute::OFF | osg::StateAttribute::OVERRIDE);
at->setAutoScaleToScreen(true);
at->setMinimumScale(100.0);
at->setMaximumScale(10000);
at->setAutoScaleTransitionWidthRatio(0.0);
return at;
}
————————————————
版权声明:本文为CSDN博主「吉生太」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_41157291/article/details/127157145

标签:仿真,特效,color,back,osgearth,geom,push,StateAttribute,osg
From: https://www.cnblogs.com/tingtaishou/p/16909223.html

相关文章

  • 遨博机械臂URDF功能包ROS仿真
    文章目录​​知识目标​​​​1.机械臂URDF功能包文件结构​​​​2.URDF模型中的元素和参数​​​​3.任务描述​​​​3.1修订launch启动文件参数​​​​3.2URDF功能包......
  • 移动端-常见特效
    移动端-常见特效1.classList属性classList属性是HTML5新增的一个属性,返回元素的类名。但是ie10以上版本支持。该属性用于在元素中添加,移除及切换CSS类。有以下方法添加......
  • EKF在纯方位寻地导弹中得应用及MATLAB仿真
    参考内容:书籍《卡尔曼滤波原理及应用------matlab仿真》这本书对kalman算法的解析很清晰,MATLAB程序很全,适合初学者(如有侵权,请联系删除(qq:1491967912))1、三维寻地......
  • MIMO系统中基于K-Best的球形译码算法的matlab仿真
    目录一、理论基础二、核心程序三、测试结果一、理论基础空间调制技术因其具备更高的数据传输效率、更高的频谱效率和更低的功率损耗而受到学术界和工业界的广泛关注......
  • 【DNN,OFDM检测】基于DNN深度学习网络的OFDM信号检测算法的matlab仿真
    1.软件版本matlab2021a2.部分核心代码      3.部分代码clearvariables;closeall;load('TrainingData.mat');load('ValidationData.mat');%%Definetr......
  • 【MPPT光伏】基于MPPT的光伏并网系统的simulink仿真
    1.软件版本MATLAB2019a2.本算法理论知识设计光伏并网之前,首先需要设计一个光伏电池的仿真模型。光伏电源的等效电路如下所示:    那么很显然就有:   通过......
  • Altair Simsolid正版软件都有哪些功能 衡祖仿真
    AltairSimsolid软件能帮助用户分析与传统FEA不相关的复杂零件和大型组件,并在台式计算机上就能轻轻松松的以高的效率完成,真的是既快速又准确,并使用独特的多通道还能自适应......
  • 心型特效
    <!DOCTYPEhtml><htmllang="en"><head'content-type':'application/x-www-form-urlencoded'><metacharset="UTF-8"><title>我爱你</title><stylet......
  • 牛畜牧养殖虚拟仿真技术应用优势有哪些?
    强国必先强教育,我国正处于实现现代化建设战略目标的关键时期,但由于多方面原因,我们在教育内容、人才培养模式和教学方法上相对滞后,导致各类人才难以满足发展需求。深圳......
  • Python图像处理丨5种图像处理特效
    摘要:本篇文章主要讲解了图像常见的特效处理,从处理效果图、算法原理、代码实现三个步骤进行详细讲解,涉及图像素描特效、怀旧特效、光照特效、流年特效、图像滤镜等。本文分......