SLProject  4.2.000
A platform independent 3D computer graphics framework for desktop OS, Android, iOS and online in web browsers
AppNodeScene.cpp
Go to the documentation of this file.
1 /**
2  * \file AppNodeScene.cpp
3  * \brief Scene creation callback for the the node demo app
4  * \date June 2024
5  * \authors Marino von Wattenwyl
6  * \copyright http://opensource.org/licenses/GPL-3.0
7  * \remarks Please use clangformat to format the code. See more code style on
8  * https://github.com/cpvrlab/SLProject4/wiki/SLProject-Coding-Style
9 */
10 
11 #include <AppCommon.h>
12 #include <AppNodeScene.h>
13 
14 #include <SLBox.h>
15 #include <SLCamera.h>
16 #include <SLLightSpot.h>
17 #include <SLNode.h>
18 #include <SLMaterial.h>
19 #include <SLSceneView.h>
20 #include <SLAssetLoader.h>
21 
22 //-----------------------------------------------------------------------------
24 {
25 }
26 //-----------------------------------------------------------------------------
27 //! All assets the should be loaded in parallel must be registered in here.
29 {
30  // load coordinate axis arrows
31  al.addNodeToLoad(_axesNode, AppCommon::modelPath + "FBX/Axes/axes_blender.fbx");
32 }
33 //-----------------------------------------------------------------------------
34 //! After parallel loading of the assets the scene gets assembled in here.
36 {
37  SLCamera* cam1 = new SLCamera;
38  cam1->translation(2, 3, 5);
39  cam1->lookAt(-2, -1.0, 1);
40  cam1->focalDist(6);
41  cam1->background().colors(SLCol4f(0.8f, 0.8f, 0.8f));
42 
43  SLLightSpot* light1 = new SLLightSpot(am, this, 0.3f);
44  light1->translation(10, 10, 10);
45 
46  SLNode* scene = new SLNode;
47  scene->addChild(light1);
48  scene->addChild(cam1);
49 
50  SLMaterial* rMat = new SLMaterial(am, "rMat", SLCol4f(1.0f, 0.7f, 0.7f));
51  SLMaterial* gMat = new SLMaterial(am, "gMat", SLCol4f(0.7f, 1.0f, 0.7f));
52 
53  // build parent box
54  SLNode* moveBox = new SLNode("Parent");
55  moveBox->translation(0, 0, 2);
56  moveBox->rotation(22.5f, SLVec3f(0, -1, 0));
57  moveBox->addMesh(new SLBox(am, -0.3f, -0.3f, -0.3f, 0.3f, 0.3f, 0.3f, "Box", rMat));
58  moveBox->setInitialState();
59 
60  // build child box
61  SLNode* moveBoxChild = new SLNode("Child");
62  moveBoxChild->translation(0, 1, 0);
63  moveBoxChild->rotation(22.5f, SLVec3f(0, -1, 0));
64  moveBoxChild->setInitialState();
65  moveBoxChild->addMesh(new SLBox(am, -0.2f, -0.2f, -0.2f, 0.2f, 0.2f, 0.2f, "Box", gMat));
66  moveBox->addChild(moveBoxChild);
67 
68  _axesNode->name("Axes");
69 
70  scene->addChild(moveBox);
71  scene->addChild(_axesNode);
72 
73  root3D(scene);
74 
75  sv->camera(cam1);
76  sv->doWaitOnIdle(false);
77 }
78 //-----------------------------------------------------------------------------
The AppCommon class holds the top-level instances of the app-demo.
Scene creation callback for the the node demo app.
SLVec3< SLfloat > SLVec3f
Definition: SLVec3.h:318
SLVec4< SLfloat > SLCol4f
Definition: SLVec4.h:237
static SLstring modelPath
Path to 3D models.
Definition: AppCommon.h:85
SLNode * _axesNode
Definition: AppNodeScene.h:42
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 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.
Axis aligned box mesh.
Definition: SLBox.h:31
Active or visible camera node class.
Definition: SLCamera.h:54
void focalDist(const SLfloat f)
Definition: SLCamera.h:116
SLBackground & background()
Definition: SLCamera.h:165
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 rotation(const SLQuat4f &rot, SLTransformSpace relativeTo=TS_parent)
Definition: SLNode.cpp:846
void addChild(SLNode *child)
Definition: SLNode.cpp:207
void translation(const SLVec3f &pos, SLTransformSpace relativeTo=TS_parent)
Definition: SLNode.cpp:828
virtual void addMesh(SLMesh *mesh)
Definition: SLNode.cpp:157
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 name(const SLstring &Name)
Definition: SLObject.h:34
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
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