SLProject  4.2.000
A platform independent 3D computer graphics framework for desktop OS, Android, iOS and online in web browsers
AppDemoSceneZFighting.cpp
Go to the documentation of this file.
1 /**
2  * \file AppDemoSceneZFighting.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 
13 #include <AppDemoSceneZFighting.h>
14 #include <AppCommon.h>
15 #include <SLAssetLoader.h>
16 #include <SLLightSpot.h>
17 #include <SLRectangle.h>
18 
19 //-----------------------------------------------------------------------------
21 {
22  info("The reason for this depth fighting is that the camera's near clipping distance "
23  "is almost zero and the far clipping distance is too large. The depth buffer only "
24  "has 32-bit precision, which leads to this fighting effect when the distance "
25  "between the near and far clipping planes is too large. You can adjust these "
26  "values over the menu Camera > Projection");
27 }
28 //-----------------------------------------------------------------------------
29 //! All assets the should be loaded in parallel must be registered in here.
31 {
32 }
33 //-----------------------------------------------------------------------------
34 //! After parallel loading of the assets the scene gets assembled in here.
36 {
37  // Create a scene group node
38  SLNode* scene = new SLNode("scene node");
39  this->root3D(scene);
40 
41  SLCamera* cam1 = new SLCamera("Camera 1");
42  cam1->clipNear(0.0001f);
43  cam1->clipFar(1000000);
44  cam1->translation(0, 0, 4);
45  cam1->lookAt(0, 0, 0);
46  cam1->focalDist(4);
47  cam1->background().colors(SLCol4f(0.7f, 0.7f, 0.7f),
48  SLCol4f(0.2f, 0.2f, 0.2f));
49  cam1->setInitialState();
50  scene->addChild(cam1);
51 
52  // Create materials
53  SLMaterial* matR = new SLMaterial(am, "matR", SLCol4f::RED);
54  SLMaterial* matG = new SLMaterial(am, "matG", SLCol4f::GREEN);
55 
56  // Create a light source node
57  SLLightSpot* light1 = new SLLightSpot(am, this, 0.3f);
58  light1->translation(5, 0, 5);
59  light1->name("light node");
60  scene->addChild(light1);
61 
62  // Create two squares
63  SLMesh* rectMeshR = new SLRectangle(am,
64  SLVec2f(-1, -1),
65  SLVec2f(1, 1),
66  1,
67  1,
68  "RectR",
69  matR);
70  SLNode* rectNodeR = new SLNode(rectMeshR, "Rect Node Red");
71  scene->addChild(rectNodeR);
72 
73  SLMesh* rectMeshG = new SLRectangle(am,
74  SLVec2f(-0.8f, -0.8f),
75  SLVec2f(0.8f, 0.8f),
76  1,
77  1,
78  "RectG",
79  matG);
80  SLNode* rectNodeG = new SLNode(rectMeshG, "Rect Node Green");
81  rectNodeG->rotate(2.0f, 1, 1, 0);
82  scene->addChild(rectNodeG);
83 
84  // Save energy
85  sv->doWaitOnIdle(true);
86 
87  sv->camera(cam1);
88 }
89 //-----------------------------------------------------------------------------
The AppCommon class holds the top-level instances of the app-demo.
Class declaration for an SLScene inherited class.
SLVec2< SLfloat > SLVec2f
Definition: SLVec2.h:141
SLVec4< SLfloat > SLCol4f
Definition: SLVec4.h:237
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.
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
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
An SLMesh object is a triangulated mesh, drawn with one draw call.
Definition: SLMesh.h:134
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 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
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
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
static SLVec4 GREEN
Definition: SLVec4.h:217
static SLVec4 RED
Definition: SLVec4.h:216