SLProject  4.2.000
A platform independent 3D computer graphics framework for desktop OS, Android, iOS and online in web browsers
AppDemoSceneVideoTrackWAI.cpp
Go to the documentation of this file.
1 /**
2  * \file AppDemoSceneVideoTrackWAI.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 <CVCapture.h>
16 #include <SLAssetLoader.h>
17 #include <SLLightSpot.h>
18 #include <SLBox.h>
19 #include <SLCoordAxis.h>
20 
21 #ifdef SL_BUILD_WAI
22 # include <CVTrackedWAI.h>
23 #endif
24 
25 #ifdef SL_BUILD_WAI
26 // Global pointers declared in AppDemoVideo
28 extern CVTracked* gVideoTracker;
30 #endif
31 
32 //-----------------------------------------------------------------------------
34  : SLScene("Feature Tracking with ORBSLAM library")
35 {
36  info("Feature Tracking with ORBSLAM library");
37 }
38 //-----------------------------------------------------------------------------
39 //! All assets the should be loaded in parallel must be registered in here.
41 {
42 #ifdef SL_BUILD_WAI
43  // Create video texture on global pointer updated in AppDemoVideo
46  "LiveVideoError.png",
47  GL_LINEAR,
48  GL_LINEAR);
49 
50  al.addLoadTask([] {
51  // Create OpenCV Tracker for the box node
52  std::string vocFileName;
53 # if USE_FBOW
54  vocFileName = "voc_fbow.bin";
55 # else
56  vocFileName = "ORBvoc.bin";
57 # endif
60  });
61 #endif
62 }
63 //-----------------------------------------------------------------------------
64 //! After parallel loading of the assets the scene gets assembled in here.
66  SLSceneView* sv)
67 {
68 #ifdef SL_BUILD_WAI
70 
71  // Material
72  SLMaterial* yellow = new SLMaterial(am,
73  "mY",
74  SLCol4f(1, 1, 0, 0.5f));
75  SLMaterial* cyan = new SLMaterial(am,
76  "mY",
77  SLCol4f(0, 1, 1, 0.5f));
78 
79  // Create a scene group node
80  SLNode* scene = new SLNode("scene node");
81  root3D(scene);
82 
83  // Create a camera node 1
84  SLCamera* cam1 = new SLCamera("Camera 1");
85  cam1->translation(0, 0, 5);
86  cam1->lookAt(0, 0, 0);
87  cam1->fov(CVCapture::instance()->activeCamera->calibration.cameraFovVDeg());
89  cam1->setInitialState();
90  scene->addChild(cam1);
91 
92  // Create a light source node
93  SLLightSpot* light1 = new SLLightSpot(am, this, 0.02f);
94  light1->translation(0.12f, 0.12f, 0.12f);
95  light1->name("light node");
96  scene->addChild(light1);
97 
98  // Get the half edge length of the aruco marker
99  SLfloat edgeLen = 0.1f;
100  SLfloat he = edgeLen * 0.5f;
101 
102  // Build mesh & node that will be tracked by the 1st marker (camera)
103  SLBox* box1 = new SLBox(am,
104  -he,
105  -he,
106  -he,
107  he,
108  he,
109  he,
110  "Box 1",
111  yellow);
112  SLNode* boxNode1 = new SLNode(box1, "Box Node 1");
113  SLNode* axisNode1 = new SLNode(new SLCoordAxis(am), "Axis Node 1");
114  axisNode1->setDrawBitsRec(SL_DB_MESHWIRED, false);
115  axisNode1->scale(edgeLen);
116  axisNode1->translate(-he, -he, -he, TS_parent);
117  boxNode1->addChild(axisNode1);
118  boxNode1->setDrawBitsRec(SL_DB_CULLOFF, true);
119  boxNode1->translate(0.0f, 0.0f, 1.0f, TS_world);
120  scene->addChild(boxNode1);
121 
122  // The tracker moves the box node
123  gVideoTrackedNode = cam1;
124 
125  sv->camera(cam1);
126  sv->doWaitOnIdle(false);
127 #endif
128 }
129 //-----------------------------------------------------------------------------
The AppCommon class holds the top-level instances of the app-demo.
SLNode * gVideoTrackedNode
CVTracked * gVideoTracker
SLGLTexture * gVideoTexture
Class declaration for an SLScene inherited class.
@ VT_MAIN
Main camera on all on all all devices.
Definition: CVCapture.h:42
float SLfloat
Definition: SL.h:173
#define SL_DB_CULLOFF
Turn off face culling.
Definition: SLDrawBits.h:28
#define SL_DB_MESHWIRED
Draw polygons as wired mesh.
Definition: SLDrawBits.h:22
@ TS_world
Definition: SLEnums.h:208
@ TS_parent
Definition: SLEnums.h:209
SLVec4< SLfloat > SLCol4f
Definition: SLVec4.h:237
static SLstring calibIniPath
That's where data/calibrations folder is located.
Definition: AppCommon.h:108
static SLstring exePath
executable root path
Definition: AppCommon.h:80
static SLstring texturePath
Path to texture images.
Definition: AppCommon.h:86
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 videoType(CVVideoType vt)
Setter for video type also sets the active calibration.
Definition: CVCapture.cpp:866
static CVCapture * instance()
Public static instance getter for singleton pattern.
Definition: CVCapture.h:65
CVTracked is the pure virtual base class for tracking features in video.
Definition: CVTracked.h:50
void drawDetection(bool draw)
Definition: CVTracked.h:60
Tracker that uses the ORB-Slam based WAI library (Where Am I)
Definition: CVTrackedWAI.h:26
void addLoadTask(SLAssetLoadTask task)
Add generic task.
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 texture(SLGLTexture *backgroundTexture, bool fixAspectRatio=false)
If flag _repeatBlurred is true the texture is not distorted if its size does not fit to screen aspect...
Axis aligned box mesh.
Definition: SLBox.h:31
Active or visible camera node class.
Definition: SLCamera.h:54
SLBackground & background()
Definition: SLCamera.h:165
void fov(const SLfloat fov)
vertical field of view
Definition: SLCamera.h:98
Axis aligned coordinate axis mesh.
Definition: SLCoordAxis.h:31
Texture object for OpenGL texturing.
Definition: SLGLTexture.h:110
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 scale(SLfloat s)
Definition: SLNode.h:640
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 setDrawBitsRec(SLuint bit, SLbool state)
Definition: SLNode.cpp:804
void translate(const SLVec3f &vec, SLTransformSpace relativeTo=TS_object)
Definition: SLNode.cpp:906
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
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
string findFile(const string &filename, const vector< string > &pathsToCheck)
Tries to find a filename on various paths to check.
Definition: Utils.cpp:1077