SLProject  4.2.000
A platform independent 3D computer graphics framework for desktop OS, Android, iOS and online in web browsers
AppDemoSceneFrustum.cpp
Go to the documentation of this file.
1 /**
2  * \file AppDemoSceneFrustum.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 "SL.h"
14 #include <AppDemoSceneFrustum.h>
15 #include <AppCommon.h>
16 #include <SLAssetLoader.h>
17 #include <SLLightSpot.h>
18 #include <SLSphere.h>
19 
20 //-----------------------------------------------------------------------------
21 AppDemoSceneFrustum::AppDemoSceneFrustum() : SLScene("Frustum Culling Test Scene")
22 {
23  info("View frustum culling: Only objects in view are rendered. "
24  "You can turn view frustum culling on/off in the menu Preferences or with the key F.");
25 }
26 //-----------------------------------------------------------------------------
27 //! All assets the should be loaded in parallel must be registered in here.
29 {
31  AppCommon::texturePath + "earth1024_C.jpg");
32 }
33 //-----------------------------------------------------------------------------
34 //! After parallel loading of the assets the scene gets assembled in here.
36 {
37  // create texture
38  SLMaterial* mat1 = new SLMaterial(am, "mat1", _tex);
39 
40  SLCamera* cam1 = new SLCamera("Camera 1");
41  cam1->clipNear(0.1f);
42  cam1->clipFar(100);
43  cam1->translation(0, 0, 1);
44  cam1->lookAt(0, 0, 0);
45  cam1->focalDist(5);
46  cam1->background().colors(SLCol4f(0.1f, 0.1f, 0.1f));
47  cam1->setInitialState();
49 
50  SLLightSpot* light1 = new SLLightSpot(am,
51  this,
52  10,
53  10,
54  10,
55  0.3f);
56  light1->powers(0.2f, 0.8f, 1.0f);
57  light1->attenuation(1, 0, 0);
58 
59  SLNode* scene = new SLNode;
60  this->root3D(scene);
61  scene->addChild(cam1);
62  scene->addChild(light1);
63 
64  // add one single sphere in the center
65  SLuint res = 16;
66  SLNode* sphere = new SLNode(new SLSphere(am,
67  0.15f,
68  res,
69  res,
70  "mySphere",
71  mat1));
72  scene->addChild(sphere);
73 
74  // create spheres around the center sphere
75  SLint size = 20;
76  for (SLint iZ = -size; iZ <= size; ++iZ)
77  {
78  for (SLint iY = -size; iY <= size; ++iY)
79  {
80  for (SLint iX = -size; iX <= size; ++iX)
81  {
82  if (iX != 0 || iY != 0 || iZ != 0)
83  {
84  SLNode* sph = sphere->copyRec();
85  sph->translate(float(iX),
86  float(iY),
87  float(iZ),
88  TS_object);
89  scene->addChild(sph);
90  }
91  }
92  }
93  }
94 
95  SLuint num = (SLuint)(size + size + 1);
96 
97  SL_LOG_DEBUG("Triangles on GPU : %u", res * res * 2 * num * num * num);
98 
99  sv->camera(cam1);
100  sv->doWaitOnIdle(false);
101 }
102 //-----------------------------------------------------------------------------
The AppCommon class holds the top-level instances of the app-demo.
Class declaration for an SLScene inherited class.
#define SL_LOG_DEBUG(...)
Definition: SL.h:237
unsigned int SLuint
Definition: SL.h:171
int SLint
Definition: SL.h:170
@ TS_object
Definition: SLEnums.h:210
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 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
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
virtual SLNode * copyRec()
Definition: SLNode.cpp:572
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 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
SLSphere creates a sphere mesh based on SLSpheric w. 180 deg polar angle.
Definition: SLSphere.h:33