SLProject  4.2.000
A platform independent 3D computer graphics framework for desktop OS, Android, iOS and online in web browsers
AppDemoSceneAnimSkinnedMass.cpp
Go to the documentation of this file.
1 /**
2  * \file AppDemoSceneAnimSkinnedMass.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 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 <SLRectangle.h>
18 
19 //-----------------------------------------------------------------------------
21  : SLScene("Mass Skeletal Animation Test Scene")
22 {
23  info("Mass Skeletal Animation Test Scene");
24 }
25 //-----------------------------------------------------------------------------
26 //! All assets the should be loaded in parallel must be registered in here.
28 {
31  "DAE/AstroBoy/AstroBoy.dae");
32 }
33 //-----------------------------------------------------------------------------
34 //! After parallel loading of the assets the scene gets assembled in here.
36 {
37  // Create materials
38  SLMaterial* m1 = new SLMaterial(am, "m1", SLCol4f::GRAY);
40 
41  // Define a light
42  SLLightSpot* light1 = new SLLightSpot(am,
43  this,
44  100,
45  40,
46  100,
47  1);
48  light1->powers(0.1f, 1.0f, 1.0f);
49  light1->attenuation(1, 0, 0);
50 
51  // Define camera
52  SLCamera* cam1 = new SLCamera;
53  cam1->translation(0, 10, 10);
54  cam1->lookAt(0, 0, 0);
55  cam1->focalDist(cam1->translationOS().length());
56  cam1->background().colors(SLCol4f(0.1f, 0.4f, 0.8f));
57  cam1->setInitialState();
59 
60  // Floor rectangle
61  SLNode* rect = new SLNode(new SLRectangle(am,
62  SLVec2f(-20, -20),
63  SLVec2f(20, 20),
64  SLVec2f(0, 0),
65  SLVec2f(50, 50),
66  50,
67  50,
68  "Floor",
69  m1));
70  rect->rotate(90, -1, 0, 0);
71 
73 
74  // Assemble scene
75  SLNode* scene = new SLNode("scene group");
76  root3D(scene);
77  scene->addChild(light1);
78  scene->addChild(rect);
79  scene->addChild(_center);
80  scene->addChild(cam1);
81 
82  std::uniform_real_distribution<float> dist(0.0f, 1.0f);
83  std::default_random_engine randEngine;
84 
85  // create astroboys around the center astroboy
86  SLint size = 4;
87  for (SLint iZ = -size; iZ <= size; ++iZ)
88  {
89  for (SLint iX = -size; iX <= size; ++iX)
90  {
91  SLbool shift = iX % 2 != 0;
92  if (iX != 0 || iZ != 0)
93  {
94  float xt = float(iX) * 1.0f;
95  float zt = float(iZ) * 1.0f + ((shift) ? 0.5f : 0.0f);
96  SLNode* n = _center->copyRec();
97  n->translate(xt, 0, zt, TS_object);
98  n->scale(0.75f + 0.5f * dist(randEngine));
99  scene->addChild(n);
100  }
101  }
102  }
103 
104  sv->camera(cam1);
105 }
106 //-----------------------------------------------------------------------------
The AppCommon class holds the top-level instances of the app-demo.
Class declaration for an SLScene inherited class.
bool SLbool
Definition: SL.h:175
int SLint
Definition: SL.h:170
@ 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 modelPath
Path to 3D models.
Definition: AppCommon.h:85
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.
SLAnimPlayback * animPlaybacksBack()
Definition: SLAnimManager.h:50
void addNodeToLoad(SLNode *&node, const SLstring &modelPath, SLSkybox *skybox=nullptr, SLbool deleteTexImgAfterBuild=false, SLbool loadMeshesOnly=true, SLMaterial *overrideMat=nullptr, float ambientFactor=0.5f, SLbool forceCookTorranceRM=false, SLuint flags=SLProcess_Triangulate|SLProcess_JoinIdenticalVertices|SLProcess_RemoveRedundantMaterials|SLProcess_FindDegenerates|SLProcess_FindInvalidData|SLProcess_SplitLargeMeshes)
Add mesh from file to load via assimp loader.
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 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
void specular(const SLCol4f &spec)
Definition: SLMaterial.h:173
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 scale(SLfloat s)
Definition: SLNode.h:640
virtual SLNode * copyRec()
Definition: SLNode.cpp:572
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
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 length() const
Definition: SLVec3.h:122
static SLVec4 BLACK
Definition: SLVec4.h:213
static SLVec4 GRAY
Definition: SLVec4.h:214