• OsgOsg实例烟雾粒子效果飞机(Qt5.14.2+osgEarht3.6.5+win10)No6EParticlePlane


    相关资料:

    https://blog.csdn.net/qq_35225556/article/details/109730460?spm=1001.2101.3001.6650.10&utm_medium=distribute.pc_relevant.none-task-blog-2~default~CTRLIST~default-10.no_search_link&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2~default~CTRLIST~default-10.no_search_link     osg粒子飞行尾迹

    代码实例:

    .pro

     1 QT       += core gui widgets
     2 TARGET = TestOsgQt
     3 TEMPLATE = app
     4 DEFINES += QT_DEPRECATED_WARNINGS
     5 CONFIG += c++11
     6 
     7 SOURCES += \
     8         main.cpp
     9 
    10 HEADERS +=
    11 
    12 OsgDir = D:\\RuanJian\\osg365R
    13 CONFIG(release, debug|release) {
    14         LIBS += -L$${OsgDir}/lib/ -losgDB -losgViewer -lOpenThreads -losgAnimation -losg \
    15                                   -losgEarth -losgEarthAnnotation -losgEarthFeatures -losgEarthSymbology -losgEarthUtil \
    16                                   -losgQOpenGL -losgUtil -losgText -losgTerrain -losgSim \
    17                                   -losgShadow -losgParticle -losgManipulator -losgGA -losgFX \
    18                                   -losgWidget
    19 } else {
    20         LIBS += -L$${OsgDir}/debug/lib/ -losgDBd -losgViewerd -lOpenThreadsd -losgAnimationd -losgd \
    21                                   -losgEarthd -losgEarthAnnotationd -losgEarthFeaturesd -losgEarthSymbologyd -losgEarthUtild \
    22                                   -losgQOpenGLd -losgUtild -losgTextd -losgTerraind -losgSimd \
    23                                   -losgShadowd -losgParticled -losgManipulatord -losgGAd -losgFXd \
    24 }
    25 
    26 
    27 INCLUDEPATH += $${OsgDir}/include
    28 DEPENDPATH += $${OsgDir}/include
    View Code

    main.cpp

      1 #include <QApplication>
      2 
      3 #include <osg/Node>
      4 #include <osg/Group>
      5 #include <osg/Geode>
      6 #include <osg/Geometry>
      7 #include <osg/Texture2D>
      8 #include <osg/StateSet>
      9 #include <osg/PositionAttitudeTransform>
     10 #include <osgViewer/Viewer>
     11 #include <osgDB/ReadFile>
     12 #include <osgParticle/PrecipitationEffect>
     13 // 雨雪效果
     14 #include <osg/MatrixTransform>
     15 // 粒子效果
     16 #include <osgParticle/PrecipitationEffect>
     17 #include <osgParticle/Particle>
     18 #include <osgParticle/LinearInterpolator>
     19 #include <osgParticle/ParticleSystem>
     20 #include <osgParticle/RandomRateCounter>
     21 #include <osgParticle/PointPlacer>
     22 #include <osgParticle/RadialShooter>
     23 #include <osgParticle/ModularEmitter>
     24 #include <osgParticle/ParticleSystemUpdater>
     25 #include <osgParticle/ModularProgram>
     26 #include <osgUtil/Optimizer>
     27 #include <osgUtil/Simplifier>
     28 #include <osgParticle/FireEffect>
     29 //
     30 #include <osg/Fog>
     31 #include <osgDB/ReadFile>
     32 #include <osgViewer/Viewer>
     33 #include <osg/StateSet>
     34 #include <osg/StateAttribute>
     35 #include <osgViewer/ViewerEventHandlers>
     36 #include <osgWidget/ViewerEventHandlers>
     37 
     38 //设置飞机动态移动
     39 class transCallback : public osg::NodeCallback
     40 {
     41 public:
     42     transCallback():delta(0.0){}
     43     virtual void operator()(osg::Node* node, osg::NodeVisitor* nv)
     44     {
     45         osg::MatrixTransform* mt = dynamic_cast<osg::MatrixTransform*>(node);
     46         if(mt)
     47         {
     48             mt->setMatrix(osg::Matrix::translate(0,delta,0));
     49             delta += 0.1;
     50             traverse(node,nv);
     51         }
     52     }
     53 private:
     54     float delta;
     55 };
     56 
     57 //设置飞机尾焰的位置
     58 class firePosCallback : public osgGA::GUIEventHandler
     59 {
     60 public:
     61     firePosCallback(osg::ref_ptr<osg::MatrixTransform> mt,osg::ref_ptr<osgParticle::FireEffect> _fire):mat(mt),fire(_fire){}
     62     ~firePosCallback(){}
     63 
     64     bool handle(const osgGA::GUIEventAdapter &ea   ,osgGA::GUIActionAdapter &aa)
     65     {
     66         osgViewer::View *viewer = dynamic_cast<osgViewer::View*>(&aa);
     67         switch (ea.getEventType())
     68         {
     69             case osgGA::GUIEventAdapter::FRAME:
     70                 {
     71                     osg::Vec3 position = mat->getMatrix().getTrans();
     72                     fire->setPosition(position);
     73                 }
     74                 break;
     75             default:
     76                 return false;
     77         }
     78         return false;
     79     }
     80 
     81 private:
     82     osg::ref_ptr<osgParticle::FireEffect> fire;
     83     osg::ref_ptr<osg::MatrixTransform> mat;
     84 };
     85 
     86 int main(int argc, char *argv[])
     87 {
     88     // ------------------粒子效果-----------------------
     89     osg::ref_ptr<osg::Group> root = new osg::Group;
     90     osg::ref_ptr<osg::Node> node = osgDB::readNodeFile("D:\\osgFiles\\cessna.osg");
     91     osg::ref_ptr<osg::MatrixTransform> mt = new osg::MatrixTransform;
     92     mt->setUpdateCallback(new transCallback);
     93     mt->addChild(node);
     94 
     95     osg::ref_ptr<osgParticle::FireEffect> fire = new osgParticle::FireEffect(osg::Vec3(0,0,0),50,1);
     96     fire->setWind(osg::Vec3(1.0f,0.0f,0.0f));
     97     osg::ref_ptr<osg::MatrixTransform> mtfire = new osg::MatrixTransform;
     98     mtfire->setMatrix(osg::Matrix::rotate(osg::PI_2,osg::X_AXIS));
     99     mtfire->addChild(fire);
    100 
    101     root->addChild(mt);
    102     root->addChild(node);
    103     root->addChild(mtfire);
    104 
    105     osgViewer::Viewer viewer;
    106     viewer.addEventHandler(new firePosCallback(mt,fire));
    107     viewer.addEventHandler(new osgViewer::StatsHandler);
    108     viewer.setUpViewInWindow(50,50,500,400);
    109     viewer.setSceneData( root.get() );
    110     return viewer.run();
    111 }
    View Code
  • 相关阅读:
    Robot Framework学习笔记V1.0
    新炬网络亿能测试“性能测试和自动化测试”技术研讨会
    js里面关于IE和万恶的IE6的判断
    addLoadEvent(func)有关
    js call和apply[转]
    原生AJAX
    搭建Python开发环境(含Selenium WebDriver安装)
    Python实现随机生成指定数量字符串的函数(方法)记面试问题2
    学习Question持续更新Question和Answer进度20170902
    Python数组和list的区别,tuple和set的区别记面试问题1
  • 原文地址:https://www.cnblogs.com/FKdelphi/p/15879098.html
Copyright © 2020-2023  润新知