SLProject  4.2.000
A platform independent 3D computer graphics framework for desktop OS, Android, iOS and online in web browsers
AppDemoSceneParticleDustStorm.cpp
Go to the documentation of this file.
1 /**
2  * \file AppDemoSceneParticleDustStorm.cpp
3  * \brief Implementation for an SLScene inherited class
4  * \details For more info about App framework and the scene assembly see:
5  * https://cpvrlab.github.io/SLProject4/app-framework.html
6  * \date May 2024
7  * \authors Marcus Hudritsch, Particle System from Marc Affolter
8  * \copyright http://opensource.org/licenses/GPL-3.0
9  * \remarks Please use clangformat to format the code. See more code style on
10  * https://github.com/cpvrlab/SLProject4/wiki/SLProject-Coding-Style
11 */
12 
14 #include <AppCommon.h>
15 #include <SLAssetLoader.h>
16 
17 //-----------------------------------------------------------------------------
19  : SLScene("Dust Storm Particle System")
20 {
21  info("This dust storm particle system uses the box shape type for distribution.\n"
22  "See the properties window for the detailed settings of the particles system");
23 }
24 //-----------------------------------------------------------------------------
25 //! All assets the should be loaded in parallel must be registered in here.
27 {
30  "ParticleSmoke_08_C.png");
33  "ParticleSmoke_03_8x8_C.png");
34 }
35 //-----------------------------------------------------------------------------
36 //! After parallel loading of the assets the scene gets assembled in here.
38  SLSceneView* sv)
39 {
40  // Create a scene group node
41  SLNode* scene = new SLNode("scene node");
42  root3D(scene);
43 
44  // Create and add camera
45  SLCamera* cam1 = new SLCamera("Camera 1");
46  cam1->translation(0, 0, 55);
47  cam1->lookAt(0, 0, 0);
48  cam1->focalDist(55);
49  scene->addChild(cam1);
50  sv->camera(cam1);
51 
52  // Create meshes and nodes
53  // Dust storm
55  500,
56  SLVec3f(-0.1f, -0.5f, -5.0f),
57  SLVec3f(0.1f, 0.5f, -2.5f),
58  3.5f,
59  _texC,
60  "DustStorm",
61  _texFlip);
62  ps->doShape(true);
63  ps->shapeType(ST_Box);
64  ps->shapeScale(50.0f, 1.0f, 50.0f);
65  ps->scale(15.0f);
66  ps->doSizeOverLT(false);
67  ps->doAlphaOverLT(true);
68  ps->doAlphaOverLTCurve(true);
69  ps->bezierStartEndPointAlpha()[1] = 0.0f;
70  ps->bezierControlPointAlpha()[1] = 0.5f;
71  ps->bezierControlPointAlpha()[2] = 0.5f;
73  ps->doRotRange(true);
74  ps->color(SLCol4f(1.0f, 1.0f, 1.0f, 1.0f));
75  ps->doBlendBrightness(false);
76  ps->frameRateFB(16);
77 
78  SLMesh* pSMesh = ps;
79  SLNode* pSNode = new SLNode(pSMesh, "Particle system node fire2");
80  pSNode->translate(3.0f, -0.8f, 0.0f, TS_object);
81 
82  scene->addChild(pSNode);
83 
84  // Set background color and the root scene node
85  sv->sceneViewCamera()->background().colors(SLCol4f(0.8f, 0.8f, 0.8f),
86  SLCol4f(0.2f, 0.2f, 0.2f));
87  // Save energy
88  sv->doWaitOnIdle(false);
89 }
90 //-----------------------------------------------------------------------------
The AppCommon class holds the top-level instances of the app-demo.
Class declaration for an SLScene inherited class.
@ TS_object
Definition: SLEnums.h:210
@ ST_Box
Definition: SLEnums.h:281
SLVec3< SLfloat > SLVec3f
Definition: SLVec3.h:318
SLVec4< SLfloat > SLCol4f
Definition: SLVec4.h:237
static SLstring texturePath
Path to texture images.
Definition: AppCommon.h:86
void registerAssetsToLoad(SLAssetLoader &al) override
All scene specific assets have to be registered for async loading in here.
void assemble(SLAssetManager *am, SLSceneView *sv) override
After parallel loading of the assets the scene gets assembled in here.
void addTextureToLoad(SLGLTexture *&texture, const SLstring &path, SLint min_filter=GL_LINEAR_MIPMAP_LINEAR, SLint mag_filter=GL_LINEAR, SLTextureType type=TT_unknown, SLint wrapS=GL_REPEAT, SLint wrapT=GL_REPEAT)
Add 2D textures with internal image allocation.
Toplevel holder of the assets meshes, materials, textures and shaders.
void colors(const SLCol4f &uniformColor)
Sets a uniform background color.
Active or visible camera node class.
Definition: SLCamera.h:54
void focalDist(const SLfloat f)
Definition: SLCamera.h:116
SLBackground & background()
Definition: SLCamera.h:165
An SLMesh object is a triangulated mesh, drawn with one draw call.
Definition: SLMesh.h:134
SLNode represents a node in a hierarchical scene graph.
Definition: SLNode.h:147
void addChild(SLNode *child)
Definition: SLNode.cpp:207
void translation(const SLVec3f &pos, SLTransformSpace relativeTo=TS_parent)
Definition: SLNode.cpp:828
void lookAt(SLfloat targetX, SLfloat targetY, SLfloat targetZ, SLfloat upX=0, SLfloat upY=1, SLfloat upZ=0, SLTransformSpace relativeTo=TS_world)
Definition: SLNode.h:652
void translate(const SLVec3f &vec, SLTransformSpace relativeTo=TS_object)
Definition: SLNode.cpp:906
SLParticleSystem creates a particle meshes from a point primitive buffer.
float * bezierControlPointAlpha()
SLShapeType shapeType()
float * bezierStartEndPointAlpha()
SLbool doAlphaOverLTCurve()
SLbool doBlendBrightness()
The SLScene class represents the top level instance holding the scene structure.
Definition: SLScene.h:47
SLNode * root3D()
Definition: SLScene.h:99
friend class SLNode
Definition: SLScene.h:48
SLstring & info()
Definition: SLScene.h:102
SceneView class represents a dynamic real time 3D view onto the scene.
Definition: SLSceneView.h:69
void camera(SLCamera *camera)
Definition: SLSceneView.h:145
void doWaitOnIdle(SLbool doWI)
Definition: SLSceneView.h:149
SLCamera * sceneViewCamera()
Definition: SLSceneView.h:169