SLProject  4.2.000
A platform independent 3D computer graphics framework for desktop OS, Android, iOS and online in web browsers
AppDemoScenePointClouds.cpp
Go to the documentation of this file.
1 /**
2  * \file AppDemoScenePointClouds.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, Marino von Wattenwyl
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 <SLAssetLoader.h>
15 #include <SLLightSpot.h>
16 #include <SLPoints.h>
17 #include <AppCommon.h>
18 
19 //-----------------------------------------------------------------------------
21 {
22  info("Point Clouds with normal and uniform distribution. "
23  "You can select vertices with rectangle select (CTRL-LMB) "
24  "and deselect selected with ALT-LMB.");
25 }
26 //-----------------------------------------------------------------------------
27 //! All assets the should be loaded in parallel must be registered in here.
29 {
31  AppCommon::shaderPath + "ColorUniformPoint.vert",
32  AppCommon::shaderPath + "Color.frag");
34  AppCommon::shaderPath + "ColorUniformPoint.vert",
35  AppCommon::shaderPath + "Color.frag");
36 }
37 //-----------------------------------------------------------------------------
38 //! After parallel loading of the assets the scene gets assembled in here.
40 {
41  SLCamera* cam1 = new SLCamera("Camera 1");
42  cam1->clipNear(0.1f);
43  cam1->clipFar(100);
44  cam1->translation(0, 0, 15);
45  cam1->lookAt(0, 0, 0);
46  cam1->focalDist(15);
47  cam1->background().colors(SLCol4f(0.1f, 0.1f, 0.1f));
48  cam1->setInitialState();
50 
51  SLLightSpot* light1 = new SLLightSpot(am, this, 10, 10, 10, 0.3f);
52  light1->powers(0.2f, 0.8f, 1.0f);
53  light1->attenuation(1, 0, 0);
54 
55  SLMaterial* pcMat1 = new SLMaterial(am, "Red", SLCol4f::RED);
56  pcMat1->program(_sp1);
57  pcMat1->program()->addUniform1f(new SLGLUniform1f(UT_const, "u_pointSize", 4.0f));
58  SLRnd3fNormal rndN(SLVec3f(0, 0, 0), SLVec3f(5, 2, 1));
59  SLNode* pc1 = new SLNode(new SLPoints(am, 1000, rndN, "PC1", pcMat1));
60  pc1->translate(-5, 0, 0);
61 
62  SLMaterial* pcMat2 = new SLMaterial(am, "Green", SLCol4f::GREEN);
63  pcMat2->program(_sp2);
64  pcMat2->program()->addUniform1f(new SLGLUniform1f(UT_const, "u_pointSize", 1.0f));
65  SLRnd3fUniform rndU(SLVec3f(0, 0, 0), SLVec3f(2, 3, 5));
66  SLNode* pc2 = new SLNode(new SLPoints(am, 1000, rndU, "PC2", pcMat2));
67  pc2->translate(5, 0, 0);
68 
69  SLNode* scene = new SLNode("scene");
70  this->root3D(scene);
71  scene->addChild(cam1);
72  scene->addChild(light1);
73  scene->addChild(pc1);
74  scene->addChild(pc2);
75 
76  sv->camera(cam1);
77  sv->doWaitOnIdle(false);
78 }
79 //-----------------------------------------------------------------------------
The AppCommon class holds the top-level instances of the app-demo.
Class declaration for an SLScene inherited class.
@ UT_const
constant value
Definition: SLEnums.h:233
SLGLUniform< SLfloat > SLGLUniform1f
Definition: SLGLUniform.h:149
SLVec3< SLfloat > SLVec3f
Definition: SLVec3.h:318
SLVec4< SLfloat > SLCol4f
Definition: SLVec4.h:237
static SLDeviceRotation devRot
Mobile device rotation from IMU.
Definition: AppCommon.h:64
static SLDeviceLocation devLoc
Mobile device location from GPS.
Definition: AppCommon.h:65
static SLstring shaderPath
Path to GLSL shader programs.
Definition: AppCommon.h:84
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 addProgramToLoad(SLGLProgram *&program, const SLstring &vertShaderFile, const SLstring &fragShaderFile)
Add generic GLSL program with shader files to load.
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 clipFar(const SLfloat cFar)
Definition: SLCamera.h:109
void clipNear(const SLfloat cNear)
Definition: SLCamera.h:108
void devRotLoc(SLDeviceRotation *devRot, SLDeviceLocation *devLoc)
Definition: SLCamera.h:120
void focalDist(const SLfloat f)
Definition: SLCamera.h:116
SLBackground & background()
Definition: SLCamera.h:165
void attenuation(const SLfloat kConstant, const SLfloat kLinear, const SLfloat kQuadratic)
Definition: SLLight.h:116
void powers(SLfloat ambiPow, SLfloat diffPow, SLfloat specPow, const SLCol4f &ambiDiffSpecCol=SLCol4f::WHITE)
Sets the ambient, diffuse and specular powers all with the same color.
Definition: SLLight.h:74
SLLightSpot class for a spot light source.
Definition: SLLightSpot.h:36
Defines a standard CG material with textures and a shader program.
Definition: SLMaterial.h:56
void program(SLGLProgram *sp)
Definition: SLMaterial.h:205
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 setInitialState()
Definition: SLNode.cpp:1084
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
The SLPoints mesh object of witch the vertices are drawn as points.
Definition: SLPoints.h:28
Class for random generator for normal distributed 3D points.
Definition: SLRnd3f.h:28
Class for random generator for uniform distributed 3D points.
Definition: SLRnd3f.h:60
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
static SLVec4 GREEN
Definition: SLVec4.h:217
static SLVec4 RED
Definition: SLVec4.h:216