SLProject  4.2.000
A platform independent 3D computer graphics framework for desktop OS, Android, iOS and online in web browsers
AppDemoSceneShaderWave.cpp
Go to the documentation of this file.
1 /**
2  * \file AppDemoSceneShaderWave.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 
13 #include <AppDemoSceneShaderWave.h>
14 #include <SLAssetLoader.h>
15 #include <SLLightSpot.h>
16 #include <SLSphere.h>
17 #include <SLRectangle.h>
18 #include <AppCommon.h>
19 
20 //-----------------------------------------------------------------------------
22  : SLScene("Per vertex wave shader")
23 {
24 
25  info("Vertex Shader with wave displacement. "
26  "Use H-Key to increment (decrement w. shift) the wave height.");
27 }
28 //-----------------------------------------------------------------------------
29 //! All assets the should be loaded in parallel must be registered in here.
31 {
33  AppCommon::shaderPath + "Wave.vert",
34  AppCommon::shaderPath + "Wave.frag");
35 }
36 //-----------------------------------------------------------------------------
37 //! After parallel loading of the assets the scene gets assembled in here.
39 {
40  SLCamera* cam1 = new SLCamera("Camera 1");
41  cam1->translation(0, 3, 8);
42  cam1->lookAt(0, 0, 0);
43  cam1->focalDist(cam1->translationOS().length());
44  cam1->background().colors(SLCol4f(0.1f, 0.4f, 0.8f));
45  cam1->setInitialState();
47 
48  // Create generic shader program with 4 custom uniforms
50  "u_h",
51  0.1f,
52  0.05f,
53  0.0f,
54  0.5f,
55  (SLKey)'H');
56  this->eventHandlers().push_back(u_h);
57  _sp->addUniform1f(u_h);
58  _sp->addUniform1f(new SLGLUniform1f(UT_inc, "u_t", 0.0f, 0.06f));
59  _sp->addUniform1f(new SLGLUniform1f(UT_const, "u_a", 2.5f));
60  _sp->addUniform1f(new SLGLUniform1f(UT_incDec, "u_b", 2.2f, 0.01f, 2.0f, 2.5f));
61 
62  // Create materials
63  SLMaterial* matWater = new SLMaterial(am,
64  "matWater",
65  SLCol4f(0.45f, 0.65f, 0.70f),
67  300);
68  matWater->program(_sp);
69  SLMaterial* matRed = new SLMaterial(am,
70  "matRed",
71  SLCol4f(1.00f, 0.00f, 0.00f));
72 
73  // water rectangle in the y=0 plane
74  SLNode* wave = new SLNode(new SLRectangle(am,
77  40,
78  40,
79  "WaterRect",
80  matWater));
81  wave->rotate(90, -1, 0, 0);
82 
83  SLLightSpot* light0 = new SLLightSpot(am, this);
84  light0->ambiDiffPowers(0, 1);
85  light0->translate(0, 4, -4, TS_object);
86  light0->attenuation(1, 0, 0);
87 
88  SLNode* scene = new SLNode;
89  this->root3D(scene);
90  scene->addChild(light0);
91  scene->addChild(wave);
92  scene->addChild(new SLNode(new SLSphere(am,
93  1,
94  32,
95  32,
96  "Red Sphere",
97  matRed)));
98  scene->addChild(cam1);
99 
100  sv->camera(cam1);
101  sv->doWaitOnIdle(false);
102 }
103 //-----------------------------------------------------------------------------
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
@ UT_incDec
never ending loop from min to max and max to min
Definition: SLEnums.h:234
@ UT_inc
never ending increment
Definition: SLEnums.h:236
@ UT_const
constant value
Definition: SLEnums.h:233
SLKey
Keyboard key codes enumeration.
Definition: SLEnums.h:16
SLGLUniform< SLfloat > SLGLUniform1f
Definition: SLGLUniform.h:149
SLVec2< SLfloat > SLVec2f
Definition: SLVec2.h:141
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 assemble(SLAssetManager *am, SLSceneView *sv) override
After parallel loading of the assets the scene gets assembled in here.
void registerAssetsToLoad(SLAssetLoader &al) override
All scene specific assets have to be registered for async loading 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 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 addUniform1f(SLGLUniform1f *u)
add float uniform
Template for a single GLSL uniform variable.
Definition: SLGLUniform.h:24
void ambiDiffPowers(SLfloat ambiPow, SLfloat diffPow, const SLCol4f &ambiDiffCol=SLCol4f::WHITE)
Sets the ambient and diffuse powers with the same color.
Definition: SLLight.h:88
void attenuation(const SLfloat kConstant, const SLfloat kLinear, const SLfloat kQuadratic)
Definition: SLLight.h:116
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 rotate(const SLQuat4f &rot, SLTransformSpace relativeTo=TS_object)
Definition: SLNode.cpp:945
SLVec3f translationOS() const
Definition: SLNode.h:468
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
SLRectangle creates a rectangular mesh with a certain resolution.
Definition: SLRectangle.h:29
The SLScene class represents the top level instance holding the scene structure.
Definition: SLScene.h:47
SLNode * root3D()
Definition: SLScene.h:99
SLVEventHandler & eventHandlers()
Definition: SLScene.h:105
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
SLSphere creates a sphere mesh based on SLSpheric w. 180 deg polar angle.
Definition: SLSphere.h:33
T length() const
Definition: SLVec3.h:122
static SLVec4 WHITE
Definition: SLVec4.h:215
static const float PI
Definition: Utils.h:237