SLProject  4.2.000
A platform independent 3D computer graphics framework for desktop OS, Android, iOS and online in web browsers
AppDemoSceneShaderBump.cpp
Go to the documentation of this file.
1 /**
2  * \file AppDemoSceneShaderBump.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 <AppDemoSceneShaderBump.h>
14 #include <SLAssetLoader.h>
15 #include <SLLightSpot.h>
16 #include <SLLightDirect.h>
17 #include <SLRectangle.h>
18 #include <AppCommon.h>
19 
20 //-----------------------------------------------------------------------------
22  : SLScene("Normal Map Bump Mapping")
23 {
24  info("Normal map bump mapping combined with a spot lighting.");
25 }
26 //-----------------------------------------------------------------------------
27 //! All assets the should be loaded in parallel must be registered in here.
29 {
32  "brickwall0512_C.jpg");
35  "brickwall0512_N.jpg");
36 }
37 //-----------------------------------------------------------------------------
38 //! After parallel loading of the assets the scene gets assembled in here.
40 {
41  // Create materials
42  SLMaterial* m1 = new SLMaterial(am, "m1", _texC, _texN);
43 
44  SLCamera* cam1 = new SLCamera("Camera 1");
45  cam1->translation(-10, 10, 10);
46  cam1->lookAt(0, 0, 0);
48  cam1->background().colors(SLCol4f(0.5f, 0.5f, 0.5f));
49  cam1->setInitialState();
50 
51  SLLightSpot* light1 = new SLLightSpot(am,
52  this,
53  0.3f,
54  40,
55  true);
56  light1->powers(0.1f, 1.0f, 1.0f);
57  light1->attenuation(1, 0, 0);
58  light1->translation(0, 0, 5);
59  light1->lookAt(0, 0, 0);
60 
61  SLAnimation* anim = this->animManager().createNodeAnimation("light1_anim",
62  2.0f);
63  anim->createNodeAnimTrackForEllipse(light1,
64  2.0f,
65  A_x,
66  2.0f,
67  A_y);
68 
69  SLNode* scene = new SLNode;
70  this->root3D(scene);
71  scene->addChild(light1);
72  scene->addChild(new SLNode(new SLRectangle(am,
73  SLVec2f(-5, -5),
74  SLVec2f(5, 5),
75  1,
76  1,
77  "Rect",
78  m1)));
79  scene->addChild(cam1);
80 
81  sv->camera(cam1);
82 }
83 //-----------------------------------------------------------------------------
The AppCommon class holds the top-level instances of the app-demo.
Class declaration for an SLScene inherited class.
@ A_y
Definition: SLEnums.h:81
@ A_x
Definition: SLEnums.h:80
SLVec2< SLfloat > SLVec2f
Definition: SLVec2.h:141
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.
SLAnimation * createNodeAnimation(SLfloat duration)
SLAnimation is the base container for all animation data.
Definition: SLAnimation.h:33
SLNodeAnimTrack * createNodeAnimTrackForEllipse(SLNode *target, SLfloat radiusA, SLAxis axisA, SLfloat radiusB, SLAxis axisB)
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
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
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
SLVec3f translationWS() const
Definition: SLNode.h:531
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
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
friend class SLNode
Definition: SLScene.h:48
SLAnimManager & animManager()
Definition: SLScene.h:97
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
T distance(const SLVec3 &p) const
Calculate the distance to point p.
Definition: SLVec3.h:168
static SLVec3 ZERO
Definition: SLVec3.h:285