SLProject  4.2.000
A platform independent 3D computer graphics framework for desktop OS, Android, iOS and online in web browsers
AppDemoSceneLotsOfNodes.cpp
Go to the documentation of this file.
1 /**
2  * \file AppDemoSceneLotsOfNodes.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 
14 #include <AppCommon.h>
15 #include <SLAssetLoader.h>
16 #include <SLLightSpot.h>
17 #include <SLSphere.h>
18 
19 //-----------------------------------------------------------------------------
21  : SLScene("Lots of Nodes Benchmark Scene")
22 {
23  info("Lots of Nodes Benchmark Scene");
24 }
25 //-----------------------------------------------------------------------------
26 //! All assets the should be loaded in parallel must be registered in here.
28 {
29  for (int i = 0; i < _NUM_MAT; ++i)
30  {
31  al.addTextureToLoad(_texC[i],
32  AppCommon::texturePath + "earth2048_C_Q95.jpg");
33  }
34 }
35 //-----------------------------------------------------------------------------
36 //! After parallel loading of the assets the scene gets assembled in here.
38 {
39  SLCamera* cam1 = new SLCamera("Camera 1");
40  cam1->clipNear(0.1f);
41  cam1->clipFar(100);
42  cam1->translation(0, 0, 50);
43  cam1->lookAt(0, 0, 0);
44  cam1->focalDist(50);
45  cam1->background().colors(SLCol4f(0.1f, 0.1f, 0.1f));
46  cam1->setInitialState();
47 
48  SLLightSpot* light1 = new SLLightSpot(am,
49  this,
50  15,
51  15,
52  15,
53  0.3f);
54  light1->powers(0.2f, 0.8f, 1.0f);
55  light1->attenuation(1, 0, 0);
56 
57  SLNode* scene = new SLNode;
58  root3D(scene);
59  scene->addChild(cam1);
60  scene->addChild(light1);
61 
62  // Generate NUM_MAT materials
63  SLVMaterial mat;
64  for (int i = 0; i < _NUM_MAT; ++i)
65  {
66  SLstring matName = "mat-" + std::to_string(i);
67  mat.push_back(new SLMaterial(am, matName.c_str(), _texC[i]));
68  SLCol4f color;
69  color.hsva2rgba(SLVec4f(Utils::TWOPI * (float)i / (float)_NUM_MAT,
70  1.0f,
71  1.0f));
72  mat[i]->diffuse(color);
73  }
74 
75  // create a 3D array of spheres
76  SLint halfSize = 10;
77  SLuint n = 0;
78  for (SLint iZ = -halfSize; iZ <= halfSize; ++iZ)
79  {
80  for (SLint iY = -halfSize; iY <= halfSize; ++iY)
81  {
82  for (SLint iX = -halfSize; iX <= halfSize; ++iX)
83  {
84  // Choose a random material index
85  SLuint res = 36;
86  SLint iMat = (SLint)Utils::random(0, _NUM_MAT - 1);
87  SLstring nodeName = "earth-" + std::to_string(n);
88 
89  // Create a new sphere and node and translate it
90  SLSphere* earth = new SLSphere(am,
91  0.3f,
92  res,
93  res,
94  nodeName,
95  mat[iMat]);
96  SLNode* sphere = new SLNode(earth);
97  sphere->translate(float(iX),
98  float(iY),
99  float(iZ),
100  TS_object);
101  scene->addChild(sphere);
102  n++;
103  }
104  }
105  }
106 
107  sv->camera(cam1);
108  sv->doWaitOnIdle(false);
109 }
110 //-----------------------------------------------------------------------------
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
string SLstring
Definition: SL.h:158
int SLint
Definition: SL.h:170
@ TS_object
Definition: SLEnums.h:210
vector< SLMaterial * > SLVMaterial
STL vector of material pointers.
Definition: SLMaterial.h:274
SLVec4< SLfloat > SLVec4f
Definition: SLVec4.h:235
SLVec4< SLfloat > SLCol4f
Definition: SLVec4.h:237
static SLstring texturePath
Path to texture images.
Definition: AppCommon.h:86
SLGLTexture * _texC[_NUM_MAT]
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 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 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
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
void hsva2rgba(const SLVec4 &hsva)
HSVA to RGBA color conversion (http://www.rapidtables.com/convert/color/hsv-to-rgb....
Definition: SLVec4.h:191
static const float TWOPI
Definition: Utils.h:240
float random(float min, float max)
Returns a uniform distributed random float number between min and max.
Definition: Utils.h:265