Osg-Osg实例实现环境雨效果(Qt5.14.2+osgEarht3.6.5+win10)-No3-EnvironmentRain

相关资料:

https://blog.csdn.net/chlk118/article/details/47009027?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-4.control&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-4.control

代码实例:

.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 //
29 #include <osg/Fog>
30 #include <osgDB/ReadFile>
31 #include <osgViewer/Viewer>
32 #include <osg/StateSet>
33 #include <osg/StateAttribute>
34 #include <osgViewer/ViewerEventHandlers>
35 #include <osgWidget/ViewerEventHandlers>
36 
37 int main(int argc, char *argv[])
38 {
39     osg::Group* root = new osg::Group();
40     // ------------------雨----------------------
41     osg::Matrixd matrixEffect;
42     matrixEffect.makeTranslate(osg::Vec3d(0.0, 1.0, 0.0));
43     // 设置粒子位置
44     osg::ref_ptr<osg::MatrixTransform> trans = new osg::MatrixTransform;
45     // 对粒子范围进行了放大
46     trans->setMatrix(matrixEffect * osg::Matrixd::scale(100, 100, 100));
47     // 创建雨粒子
48     osg::ref_ptr<osgParticle::PrecipitationEffect> pe =
49     new osgParticle::PrecipitationEffect;
50     pe->rain(1.0);
51     pe->setUseFarLineSegments(true);
52     // iLevel参数是一个int值,表示雨的级别,一般1-10就够用了
53     int iLevel = 1;
54     pe->setParticleSize(iLevel / 10.0);
55     // 设置颜色
56     pe->setParticleColor(osg::Vec4(1, 1, 1, 1));
57 
58     trans->addChild(pe);
59     root->addChild(trans);
60     // ---------------设置窗体口显示-----------
61     //最后,设置视窗类并进入仿真循环。
62     osgViewer::Viewer viewer;
63     //设置图形环境特性
64     osg::ref_ptr<osg::GraphicsContext::Traits> traits = new osg::GraphicsContext::Traits();
65     traits->x = 100;
66     traits->y = 200;
67     traits->width = 600;
68     traits->height = 500;
69     traits->windowDecoration = true;
70     traits->doubleBuffer = true;
71     traits->sharedContext = 0;
72     //创建图形环境特性
73     osg::ref_ptr<osg::GraphicsContext> gc = osg::GraphicsContext::createGraphicsContext(traits.get());
74     if (gc.valid())
75     {
76         osg::notify(osg::INFO)<<"  GraphicsWindow has been created successfully."<<std::endl;
77 
78         //清除窗口颜色及清除颜色和深度缓冲
79         gc->setClearColor(osg::Vec4f(0.2f,0.2f,0.6f,1.0f));
80         gc->setClearMask(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
81     }
82     else
83     {
84         osg::notify(osg::NOTICE)<<"  GraphicsWindow has not been created successfully."<<std::endl;
85     }
86     //设置视口
87     viewer.getCamera()->setViewport(new osg::Viewport(0,0, traits->width, traits->height));
88     //设置图形环境
89     viewer.getCamera()->setGraphicsContext(gc.get());
90     viewer.setSceneData( root );
91     return viewer.run();
92 }
View Code

 

posted on 2022-02-10 14:00  疯狂delphi  阅读(243)  评论(0编辑  收藏  举报

导航