SLProject  4.2.000
A platform independent 3D computer graphics framework for desktop OS, Android, iOS and online in web browsers
AppDemoSceneVideoTexture.cpp
Go to the documentation of this file.
1 /**
2  * \file AppDemoSceneVideoTexture.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 <AppDemoSceneID.h>
16 #include <CVCapture.h>
17 #include <SLAssetLoader.h>
18 #include <SLLightSpot.h>
19 #include <SLRectangle.h>
20 #include <SLSphere.h>
21 
22 // Global pointers declared in AppDemoVideo
24 
25 //-----------------------------------------------------------------------------
27  : SLScene("Texture from Video"),
28  _sceneID(sid)
29 {
30  // Set scene name and info string
32  info("Minimal texture mapping example with live video source.");
33  else
34  info("Minimal texture mapping example with video file source.");
35 }
36 //-----------------------------------------------------------------------------
37 //! All assets the should be loaded in parallel must be registered in here.
39 {
40  // Create video texture on global pointer updated in AppDemoVideo
43  "LiveVideoError.png",
44  GL_LINEAR,
45  GL_LINEAR);
46 }
47 //-----------------------------------------------------------------------------
48 //! After parallel loading of the assets the scene gets assembled in here.
50 {
51  // Set scene name and info string
53  {
54  // on desktop, it will be the main camera
56  }
57  else
58  {
62  }
63 
64  sv->viewportSameAsVideo(true);
65 
66  // Create video texture on global pointer updated in AppDemoVideo
67  SLMaterial* m1 = new SLMaterial(am, "VideoMat", gVideoTexture);
68 
69  // Create a root scene group for all nodes
70  SLNode* scene = new SLNode("scene node");
71  root3D(scene);
72 
73  // Create a camera node
74  SLCamera* cam1 = new SLCamera("Camera 1");
75  cam1->translation(0, 0, 20);
76  cam1->focalDist(20);
77  cam1->lookAt(0, 0, 0);
79  cam1->setInitialState();
81  scene->addChild(cam1);
82 
83  // Create rectangle meshe and nodes
84  SLfloat h = 5.0f;
85  SLfloat w = h * sv->viewportWdivH();
86  SLMesh* rectMesh = new SLRectangle(am,
87  SLVec2f(-w, -h),
88  SLVec2f(w, h),
89  1,
90  1,
91  "rect mesh",
92  m1);
93  SLNode* rectNode = new SLNode(rectMesh, "rect node");
94  rectNode->translation(0, 0, -5);
95  scene->addChild(rectNode);
96 
97  // Center sphere
98  SLNode* sphere = new SLNode(new SLSphere(am,
99  2,
100  32,
101  32,
102  "Sphere",
103  m1));
104  sphere->rotate(-90, 1, 0, 0);
105  scene->addChild(sphere);
106 
107  // Create a light source node
108  SLLightSpot* light1 = new SLLightSpot(am, this, 0.3f);
109  light1->translation(0, 0, 5);
110  light1->lookAt(0, 0, 0);
111  light1->name("light node");
112  scene->addChild(light1);
113 
114  sv->camera(cam1);
115  sv->doWaitOnIdle(false);
116 }
117 //-----------------------------------------------------------------------------
The AppCommon class holds the top-level instances of the app-demo.
Definition of scene IDs in the demo app.
@ SID_VideoTextureLive
SLGLTexture * gVideoTexture
Class declaration for an SLScene inherited class.
@ VT_FILE
Loads a video from file with OpenCV.
Definition: CVCapture.h:44
@ VT_MAIN
Main camera on all on all all devices.
Definition: CVCapture.h:42
float SLfloat
Definition: SL.h:173
int SLSceneID
Scene identifier.
Definition: SLEnums.h:91
SLVec2< SLfloat > SLVec2f
Definition: SLVec2.h:141
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 texturePath
Path to texture images.
Definition: AppCommon.h:86
static SLstring videoPath
Path to video files.
Definition: AppCommon.h:88
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 videoType(CVVideoType vt)
Setter for video type also sets the active calibration.
Definition: CVCapture.cpp:866
string videoFilename
video filename to load
Definition: CVCapture.h:126
static CVCapture * instance()
Public static instance getter for singleton pattern.
Definition: CVCapture.h:65
bool videoLoops
flag if video should loop
Definition: CVCapture.h:127
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...
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
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
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 viewportSameAsVideo(bool sameAsVideo)
Definition: SLSceneView.h:155
SLfloat viewportWdivH() const
Definition: SLSceneView.h:178
void doWaitOnIdle(SLbool doWI)
Definition: SLSceneView.h:149
SLSphere creates a sphere mesh based on SLSpheric w. 180 deg polar angle.
Definition: SLSphere.h:33