SLProject  4.2.000
A platform independent 3D computer graphics framework for desktop OS, Android, iOS and online in web browsers
AppDemoSceneRTLens.cpp
Go to the documentation of this file.
1 /**
2  * \file AppDemoSceneRTLens.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 "SLLightDirect.h"
14 #include <AppDemoSceneRTLens.h>
15 #include <AppCommon.h>
16 #include <SLAssetLoader.h>
17 #include <SLLightSpot.h>
18 #include <SLRectangle.h>
19 #include <SLLens.h>
20 
21 //-----------------------------------------------------------------------------
23  : SLScene("Ray tracing through a lens")
24 {
25  info("Ray tracing through a lens");
26 }
27 //-----------------------------------------------------------------------------
28 //! All assets the should be loaded in parallel must be registered in here.
30 {
33  "VisionExample.jpg");
34 }
35 //-----------------------------------------------------------------------------
36 //! After parallel loading of the assets the scene gets assembled in here.
38  SLSceneView* sv)
39 {
40  // Create root node
41  SLNode* scene = new SLNode;
42  root3D(scene);
43 
44  // Create textures and materials
45  SLMaterial* mT = new SLMaterial(am,
46  "mT",
47  _tex1,
48  nullptr,
49  nullptr,
50  nullptr);
51  mT->kr(0.5f);
52 
53  // Glass material
54  SLMaterial* matLens = new SLMaterial(am,
55  "lens",
56  SLCol4f(0.0f, 0.0f, 0.0f),
57  SLCol4f(0.5f, 0.5f, 0.5f),
58  100,
59  0.5f,
60  0.5f,
61  1.5f);
62  // SLGLShaderProg* sp1 = new SLGLShaderProgGeneric("RefractReflect.vert", "RefractReflect.frag");
63  // matLens->shaderProg(sp1);
64 
65 #ifndef APP_USES_GLES
66  SLuint numSamples = 10;
67 #else
68  SLuint numSamples = 6;
69 #endif
70 
71  // Scene
72  SLCamera* cam1 = new SLCamera;
73  cam1->translation(0, 8, 0);
74  cam1->lookAt(0, 0, 0);
75  cam1->focalDist(6);
76  cam1->lensDiameter(0.4f);
77  cam1->lensSamples()->samples(numSamples, numSamples);
78  cam1->background().colors(SLCol4f(0.1f, 0.4f, 0.8f));
79  cam1->setInitialState();
81  scene->addChild(cam1);
82 
83  SLLightDirect* light1 = new SLLightDirect(am, this);
84  light1->translation(1, 1,1);
85  light1->lookAt(0, 0, 0);
86  scene->addChild(light1);
87 
88  SLuint res = 20;
89  SLNode* rect = new SLNode(new SLRectangle(am,
90  SLVec2f(-5, -5),
91  SLVec2f(5, 5),
92  res,
93  res,
94  "Rect",
95  mT));
96  rect->rotate(90, -1, 0, 0);
97  rect->translate(0, 0, -0.0f, TS_object);
98  scene->addChild(rect);
99 
100  // Lens from eye prescription card
101  // SLNode* lensA = new SLNode(new SLLens(s, 0.50f, -0.50f, 4.0f, 0.0f, 32, 32, "presbyopic", matLens)); // Weitsichtig
102  // lensA->translate(-2, 1, -2);
103  // scene->addChild(lensA);
104 
105  // SLNode* lensB = new SLNode(new SLLens(s, -0.65f, -0.10f, 4.0f, 0.0f, 32, 32, "myopic", matLens)); // Kurzsichtig
106  // lensB->translate(2, 1, -2);
107  // scene->addChild(lensB);
108 
109  // Lens with radius
110  // SLNode* lensC = new SLNode(new SLLens(s, 5.0, 4.0, 4.0f, 0.0f, 32, 32, "presbyopic", matLens)); // Weitsichtig
111  // lensC->translate(-2, 1, 2);
112  // scene->addChild(lensC);
113 
114  SLNode* lensD = new SLNode(new SLLens(am,
115  -15.0f,
116  -15.0f,
117  1.0f,
118  0.1f,
119  res,
120  res,
121  "myopic",
122  matLens)); // Kurzsichtig
123  lensD->translate(0, 6, 0);
124  scene->addChild(lensD);
125 
126  sv->camera(cam1);
127 }
128 //-----------------------------------------------------------------------------
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
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 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 lensSamples(SLuint x, SLuint y)
Definition: SLCamera.h:118
void devRotLoc(SLDeviceRotation *devRot, SLDeviceLocation *devLoc)
Definition: SLCamera.h:120
void focalDist(const SLfloat f)
Definition: SLCamera.h:116
void lensDiameter(const SLfloat d)
Definition: SLCamera.h:117
SLBackground & background()
Definition: SLCamera.h:165
SLLens creates a lens mesh based on SLRevolver.
Definition: SLLens.h:32
SLLightDirect class for a directional light source.
Definition: SLLightDirect.h:40
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
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