SLProject  4.2.000
A platform independent 3D computer graphics framework for desktop OS, Android, iOS and online in web browsers
AppDemoSceneAnimSkinnedMass2.cpp
Go to the documentation of this file.
1 /**
2  * \file AppDemoSceneAnimSkinnedMass2.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 <SLRectangle.h>
18 
19 //-----------------------------------------------------------------------------
21  : SLScene("Mass Skeletal Animation Test Scene")
22 {
23  SLchar name[512];
24  snprintf(name,
25  sizeof(name),
26  "Massive Skinned Animation Benchmark w. %d individual Astroboys",
27  _size * _size);
28  info(name);
29 }
30 //-----------------------------------------------------------------------------
31 //! All assets the should be loaded in parallel must be registered in here.
33 {
34  SLuint iA = 0;
35  for (SLint iZ = 0; iZ < _size; ++iZ)
36  {
37  for (SLint iX = 0; iX < _size; ++iX)
38  {
39  al.addNodeToLoad(_astroboy[iA++],
41  "DAE/AstroBoy/AstroBoy.dae");
42  }
43  }
44 }
45 //-----------------------------------------------------------------------------
46 //! After parallel loading of the assets the scene gets assembled in here.
48  SLSceneView* sv)
49 {
50  // Create materials
51  SLMaterial* m1 = new SLMaterial(am, "m1", SLCol4f::GRAY);
53 
54  // Define a light
55  SLLightSpot* light1 = new SLLightSpot(am,
56  this,
57  100,
58  40,
59  100,
60  1);
61  light1->powers(0.1f, 1.0f, 1.0f);
62  light1->attenuation(1, 0, 0);
63 
64  // Define camera
65  SLCamera* cam1 = new SLCamera;
66  cam1->translation(0, 30, 0);
67  cam1->lookAt(0, 0, 0);
68  cam1->focalDist(cam1->translationOS().length());
69  cam1->background().colors(SLCol4f(0.1f, 0.4f, 0.8f));
70  cam1->setInitialState();
72 
73  // Floor rectangle
74  SLNode* rect = new SLNode(new SLRectangle(am,
75  SLVec2f(-20, -20),
76  SLVec2f(20, 20),
77  SLVec2f(0, 0),
78  SLVec2f(50, 50),
79  50,
80  50,
81  "Floor",
82  m1));
83  rect->rotate(90, -1, 0, 0);
84 
85  // Assemble scene
86  SLNode* scene = new SLNode("scene group");
87  root3D(scene);
88  scene->addChild(light1);
89  scene->addChild(rect);
90  scene->addChild(cam1);
91 
92  // create army with individual astroboys
93  SLfloat offset = 1.0f;
94  SLfloat z = (float)(_size - 1) * offset * 0.5f;
95  SLuint iA = 0;
96 
97  for (SLint iZ = 0; iZ < _size; ++iZ)
98  {
99  SLfloat x = -(float)(_size - 1) * offset * 0.5f;
100 
101  for (SLint iX = 0; iX < _size; ++iX)
102  {
104  anim->playForward();
105  anim->playbackRate(Utils::random(0.5f, 1.5f));
106  _astroboy[iA]->translate(x, 0, z, TS_object);
107  scene->addChild(_astroboy[iA]);
108  x += offset;
109  iA++;
110  }
111  z -= offset;
112  }
113 
114  sv->camera(cam1);
115 }
116 //-----------------------------------------------------------------------------
The AppCommon class holds the top-level instances of the app-demo.
Class declaration for an SLScene inherited class.
float SLfloat
Definition: SL.h:173
unsigned int SLuint
Definition: SL.h:171
char SLchar
Definition: SL.h:162
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 * animPlaybackByIndex(SLuint ix)
Definition: SLAnimManager.h:49
Manages the playback of an SLAnimation.
SLfloat playbackRate() const
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
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
const SLstring & name() const
Definition: SLObject.h:38
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
float random(float min, float max)
Returns a uniform distributed random float number between min and max.
Definition: Utils.h:265