SLProject  4.2.000
A platform independent 3D computer graphics framework for desktop OS, Android, iOS and online in web browsers
AppDemoSceneRTDoF.cpp
Go to the documentation of this file.
1 /**
2  * \file AppDemoSceneRTDoF.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 <AppDemoSceneRTDoF.h>
14 #include <AppCommon.h>
15 #include <SLAssetLoader.h>
16 #include <SLLightSpot.h>
17 #include <SLRectangle.h>
18 #include <SLSphere.h>
19 
20 //-----------------------------------------------------------------------------
22  : SLScene("Depth of Field Ray Tracing")
23 {
24  info("Muttenzer Box with environment mapped reflective sphere and "
25  "transparent refractive glass sphere. Try ray tracing for real "
26  "reflections and soft shadows.");
27 }
28 //-----------------------------------------------------------------------------
29 //! All assets the should be loaded in parallel must be registered in here.
31 {
34  "Checkerboard0512_C.png",
36  GL_LINEAR);
37 }
38 //-----------------------------------------------------------------------------
39 //! After parallel loading of the assets the scene gets assembled in here.
41  SLSceneView* sv)
42 {
43  // Create root node
44  SLNode* scene = new SLNode;
45  root3D(scene);
46 
47  // Create textures and materials
48  SLMaterial* mT = new SLMaterial(am, "mT", _tex1);
49  mT->kr(0.5f);
50  SLMaterial* mW = new SLMaterial(am, "mW", SLCol4f::WHITE);
51  SLMaterial* mB = new SLMaterial(am, "mB", SLCol4f::GRAY);
52  SLMaterial* mY = new SLMaterial(am, "mY", SLCol4f::YELLOW);
53  SLMaterial* mR = new SLMaterial(am, "mR", SLCol4f::RED);
54  SLMaterial* mG = new SLMaterial(am, "mG", SLCol4f::GREEN);
55  SLMaterial* mM = new SLMaterial(am, "mM", SLCol4f::MAGENTA);
56 
57 #ifndef SL_GLES
58  SLuint numSamples = 10;
59 #else
60  SLuint numSamples = 4;
61 #endif
62 
63  stringstream ss;
64  ss << "Ray tracing with depth of field blur. Each pixel is sampled "
65  << numSamples * numSamples
66  << "x from a lens. Be patient on mobile devices.";
67 
68  info(ss.str());
69 
70  SLCamera* cam1 = new SLCamera("Camera 1");
71  cam1->translation(0, 2, 7);
72  cam1->lookAt(0, 0, 0);
73  cam1->focalDist(cam1->translationOS().length());
74  cam1->clipFar(80);
75  cam1->lensDiameter(0.4f);
76  cam1->lensSamples()->samples(numSamples, numSamples);
77  cam1->background().colors(SLCol4f(0.1f, 0.4f, 0.8f));
78  cam1->setInitialState();
79  cam1->fogIsOn(true);
80  cam1->fogMode(FM_exp);
81  cam1->fogDensity(0.04f);
82  scene->addChild(cam1);
83 
84  SLuint res = 36;
85  SLNode* rect = new SLNode(new SLRectangle(am,
86  SLVec2f(-40, -10),
87  SLVec2f(40, 70),
88  SLVec2f(0, 0),
89  SLVec2f(4, 4),
90  2,
91  2,
92  "Rect",
93  mT));
94  rect->rotate(90, -1, 0, 0);
95  rect->translate(0, 0, -0.5f, TS_object);
96  scene->addChild(rect);
97 
98  SLLightSpot* light1 = new SLLightSpot(am, this, 2, 2, 0, 0.1f);
99  light1->ambiDiffPowers(0.1f, 1);
100  light1->attenuation(1, 0, 0);
101  scene->addChild(light1);
102 
103  SLNode* balls = new SLNode;
104  SLNode* sp;
105  sp = new SLNode(new SLSphere(am, 0.5f, res, res, "S1", mW));
106  sp->translate(2.0, 0, -4, TS_object);
107  balls->addChild(sp);
108  sp = new SLNode(new SLSphere(am, 0.5f, res, res, "S2", mB));
109  sp->translate(1.5, 0, -3, TS_object);
110  balls->addChild(sp);
111  sp = new SLNode(new SLSphere(am, 0.5f, res, res, "S3", mY));
112  sp->translate(1.0, 0, -2, TS_object);
113  balls->addChild(sp);
114  sp = new SLNode(new SLSphere(am, 0.5f, res, res, "S4", mR));
115  sp->translate(0.5, 0, -1, TS_object);
116  balls->addChild(sp);
117  sp = new SLNode(new SLSphere(am, 0.5f, res, res, "S5", mG));
118  sp->translate(0.0, 0, 0, TS_object);
119  balls->addChild(sp);
120  sp = new SLNode(new SLSphere(am, 0.5f, res, res, "S6", mM));
121  sp->translate(-0.5, 0, 1, TS_object);
122  balls->addChild(sp);
123  sp = new SLNode(new SLSphere(am, 0.5f, res, res, "S7", mW));
124  sp->translate(-1.0, 0, 2, TS_object);
125  balls->addChild(sp);
126  scene->addChild(balls);
127 
128  sv->camera(cam1);
129 }
130 //-----------------------------------------------------------------------------
The AppCommon class holds the top-level instances of the app-demo.
Class declaration for an SLScene inherited class.
unsigned int SLuint
Definition: SL.h:171
@ TS_object
Definition: SLEnums.h:210
@ FM_exp
Definition: SLEnums.h:265
#define SL_ANISOTROPY_MAX
Definition: SLGLTexture.h:34
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.
SLGLTexture * _tex1
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 lensSamples(SLuint x, SLuint y)
Definition: SLCamera.h:118
void clipFar(const SLfloat cFar)
Definition: SLCamera.h:109
void focalDist(const SLfloat f)
Definition: SLCamera.h:116
void fogMode(const SLFogMode mode)
Definition: SLCamera.h:126
void lensDiameter(const SLfloat d)
Definition: SLCamera.h:117
void fogIsOn(const bool isOn)
Definition: SLCamera.h:125
SLBackground & background()
Definition: SLCamera.h:165
void fogDensity(const float density)
Definition: SLCamera.h:127
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 kr(SLfloat kr)
Definition: SLMaterial.h:184
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
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
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 GREEN
Definition: SLVec4.h:217
static SLVec4 WHITE
Definition: SLVec4.h:215
static SLVec4 GRAY
Definition: SLVec4.h:214
static SLVec4 YELLOW
Definition: SLVec4.h:219
static SLVec4 MAGENTA
Definition: SLVec4.h:221
static SLVec4 RED
Definition: SLVec4.h:216