ProtoTracer  1.0
Real-time 3D rendering and animation engine
Loading...
Searching...
No Matches
Boot.h
Go to the documentation of this file.
1#pragma once
2
3#include "../Templates/Project.h"
4#include "../../Utils/Signals/FunctionGenerator.h"
5#include "../../Assets/Models/OBJ/Spyro.h"
6#include "../../Scene/Materials/Static/NormalMaterial.h"
7#include "../../Scene/Objects/ObjectDeformer.h"
8#include "../../Scene/Materials/CombineMaterial.h"
9#include "../../Scene/Materials/Utils/MaterialAnimator.h"
10
11#include "../../Scene/Materials/Static/LightMaterial.h"
12
13#include "../../Assets/Models/OBJ/Cursor.h"
14#include "../../Assets/Models/OBJ/DoneBoot.h"
15#include "../../Assets/Models/OBJ/Init.h"
16#include "../../Assets/Models/OBJ/LoadingModules.h"
17#include "../../Assets/Models/OBJ/Plane.h"
18#include "../../Assets/Models/OBJ/ProtoDRV1.h"
19#include "../../Assets/Models/OBJ/RunningKernel.h"
20
21#include "../../Camera/CameraManager/Implementations/HUB75DeltaCameras.h"
22#include "../../Controller/HUB75Controller.h"
23
24class Boot : public Project {
25private:
28
30
31 ProtoDRV1 protoDRV1O;
32 Init initO;
33 RunningKernel runningKernelO;
34 LoadingModules loadingModulesO;
35 DoneBoot doneO;
36 Cursor cursorO;
38
40 const int frames = 1500;
41
43
47
50
51public:
53 scene.AddObject(protoDRV1O.GetObject());
54 scene.AddObject(initO.GetObject());
55 scene.AddObject(runningKernelO.GetObject());
56 scene.AddObject(loadingModulesO.GetObject());
57 scene.AddObject(doneO.GetObject());
58 scene.AddObject(cursorO.GetObject());
59 scene.AddObject(planeO.GetObject());
60
61 lights.GetLights()[0].Set(Vector3D(500, 0, 0), Vector3D(255, 0, 0), 1000.0f, 0.75f, 0.25f);//Set lights position, color intensity, falloff distance, and falloff curvature
62 lights.GetLights()[1].Set(Vector3D(0, 500, 0), Vector3D(0, 255, 0), 1000.0f, 0.75f, 0.25f);
63 lights.GetLights()[2].Set(Vector3D(0, 0, 500), Vector3D(0, 0, 255), 1000.0f, 0.75f, 0.25f);
64 lights.GetLights()[3].Set(Vector3D(-500, 0, 0), Vector3D(120, 0, 120), 1000.0f, 0.75f, 0.25f);
65 lights.GetLights()[4].Set(Vector3D(0, -500, 0), Vector3D(120, 120, 0), 1000.0f, 0.75f, 0.25f);
66 lights.GetLights()[5].Set(Vector3D(0, 0, -500), Vector3D(0, 120, 120), 1000.0f, 0.75f, 0.25f);
67
68 planeO.GetObject()->SetMaterial(&lights);
69 cursorO.GetObject()->SetMaterial(&matCombine);
70
71
74
77 }
78
79 void Initialize() override {
81 }
82
83 void Update(float ratio){
84 ratio = Mathematics::Constrain(ratio, 0.0f, 1.0f);
85 int i = (int)(ratio * (float)frames);
86
87 protoDRV1O.GetObject()->ResetVertices();
88 initO.GetObject()->ResetVertices();
89 runningKernelO.GetObject()->ResetVertices();
90 loadingModulesO.GetObject()->ResetVertices();
91 doneO.GetObject()->ResetVertices();
92 cursorO.GetObject()->ResetVertices();
93 planeO.GetObject()->ResetVertices();
94
95 lights.GetLights()[0].MoveTo(Vector3D(sinf(i * 3.14159f / 180.0f * 2.0f) * 1000.0f, 0, -cosf(i * 3.14159f / 180.0f * 2.0f) * 1000.0f));
96 lights.GetLights()[1].MoveTo(Vector3D(sinf(i * 3.14159f / 180.0f * 4.0f) * 1000.0f, -cosf(i * 3.14159f / 180.0f * 4.0f) * 1000.0f, 0));
97 lights.GetLights()[2].MoveTo(Vector3D(0, sinf(i * 3.14159f / 180.0f * 6.0f) * 1000.0f, cosf(i * 3.14159f / 180.0f * 6.0f) * 1000.0f));
98 lights.GetLights()[3].MoveTo(Vector3D(-sinf(i * 3.14159f / 180.0f * 2.0f) * 1000.0f, 0, cosf(i * 3.14159f / 180.0f * 2.0f) * 1000.0f));
99 lights.GetLights()[4].MoveTo(Vector3D(-sinf(i * 3.14159f / 180.0f * 4.0f) * 1000.0f, cosf(i * 3.14159f / 180.0f * 4.0f) * 1000.0f, 0));
100 lights.GetLights()[5].MoveTo(Vector3D(0, sinf(i * 3.14159f / 180.0f * 6.0f) * 1000.0f, -cosf(i * 3.14159f / 180.0f * 6.0f) * 1000.0f));
101
102 protoDRV1O.GetObject()->Disable();
103 initO.GetObject()->Disable();
104 runningKernelO.GetObject()->Disable();
105 loadingModulesO.GetObject()->Disable();
106 doneO.GetObject()->Disable();
107 cursorO.GetObject()->Disable();
108 planeO.GetObject()->Disable();
109
110 if(i < 180){//protodrv1
111 protoDRV1O.GetObject()->Enable();
112
113 protoDRV1O.GetObject()->GetTransform()->SetScale(Vector3D(-0.75f, 0.75f, 1));
114 protoDRV1O.GetObject()->GetTransform()->SetPosition(Vector3D(180, 48, 0));
115 } else if (i < 270){//init
116 initO.GetObject()->Enable();
117
118 initO.GetObject()->GetTransform()->SetScale(Vector3D(-0.75f, 0.75f, 1));
119 initO.GetObject()->GetTransform()->SetPosition(Vector3D(180, 48, 0));
120 } else if (i < 360){//done
121 doneO.GetObject()->Enable();
122
123 doneO.GetObject()->GetTransform()->SetScale(Vector3D(-0.75f, 0.75f, 1));
124 doneO.GetObject()->GetTransform()->SetPosition(Vector3D(180, 48, 0));
125 } else if (i < 540){//cursor blink and transform
126 cursorO.GetObject()->Enable();
127
128 if (square.Update() < 0.05f){
129 matCombine.SetOpacity(1, 1.0f);
130 }
131 else{
132 matCombine.SetOpacity(1, 0.0f);
133 }
134
135 cursorO.GetObject()->GetTransform()->SetScale(Vector3D(-0.75f, 0.75f, 1));
136 cursorO.GetObject()->GetTransform()->SetPosition(Vector3D(180, 56, 0));
137 } else if (i < 900){//cursor blink and transform
138
139 cursorO.GetObject()->Enable();
140
141 float transition = Mathematics::CosineInterpolation(0.0f, 1.0f, float(i - 540) / 360.0f);
142
143 if (square.Update() < 0.05f){
144 matCombine.SetOpacity(1, 1.0f - transition);
145 }
146 else{
147 matCombine.SetOpacity(1, 0.0f);
148 }
149
150 Vector3D scale, pos;
151
152 if (transition < 0.5f){
153 scale = Vector3D::LERP(Vector3D(-0.75f, 0.75f, 1), Vector3D(-10, 5.0f, 1), Mathematics::Map(transition, 0.0f, 0.5f, 0.0f, 1.0f));
154 }
155 else{
156 scale = Vector3D::LERP(Vector3D(-10, 5.0f, 1), Vector3D(-20, 0.0f, 1), Mathematics::Map(transition, 0.5f, 1.0f, 0.0f, 1.0f));
157 }
158
159 if (transition < 0.5f){
160 pos = Vector3D::LERP(Vector3D(180, 56, 0), Vector3D(120, 180.0f, 0), Mathematics::Map(transition, 0.0f, 0.5f, 0.0f, 1.0f));
161 }
162 else{
163 pos = Vector3D::LERP(Vector3D(120, 180, 0), Vector3D(-6.0f, 150.0f, 0), Mathematics::Map(transition, 0.5f, 1.0f, 0.0f, 1.0f));
164 }
165
166 Vector3D rotation = Vector3D::LERP(Vector3D(0, 0, 0), Vector3D(0, 0, 135), transition);
167
168 Vector3D center = cursorO.GetObject()->GetCenterOffset();
169
170 cursorO.GetObject()->GetTransform()->SetRotationOffset(center);
171 //cursorO.GetObject()->GetTransform()->SetScaleOffset(center);
172 cursorO.GetObject()->GetTransform()->SetScale(scale);
173 cursorO.GetObject()->GetTransform()->SetRotation(rotation);
174
175 cursorO.GetObject()->GetTransform()->SetPosition(pos);
176
177 textColor.SetOpacity(1, transition);
178 } else if (i < 1260){//plane
179 planeO.GetObject()->Enable();
180
181 int iO = i + 90;
182
183 float def = sinf(iO * 3.14159f / 180.0f * 1.0f) * 0.009f;
184 float freq = sinf(iO * 3.14159f / 180.0f * 1.0f) * 4000.0f;
185
186 planeDeformer.SineWaveSurfaceDeform(Vector3D(-150, 100, 0), Mathematics::Constrain(sinf(iO * 3.14159f / 180.0f * 1.0f) * 300.0f + 150.0f, 0.0f, 200.0f), sinf(-iO * 3.14159f / 180.0f * 0.1f), 0.01f + def, 7000.0f - freq, ObjectDeformer::ZAxis);
187
188 float s1 = 0.3f + sinf(iO * 3.14159f / 180.0f * 2.0f) * 0.1f;//0.3
189 float s2 = 0.4f + sinf(iO * 3.14159f / 180.0f * 2.0f) * 0.1f;//0.4
190 float s3 = 0.3f + sinf(iO * 3.14159f / 180.0f * 3.0f) * 0.1f;//0.3
191 float zs = Mathematics::Constrain(sinf(iO * 3.14159f / 180.0f * 1.0f) * 360.0f + 180.0f, 180.0f, 360.0f + 90.0f);
192 float cs = Mathematics::Constrain(sinf(iO * 3.14159f / 180.0f * 1.0f) * 90.0f + 45.0f, 0.0f, 90.0f);
193 float xs = sinf(iO * 3.14159f / 180.0f * 1.0f) * 225.0f + 45.0f;
194
195 planeO.GetObject()->GetTransform()->SetScaleOffset(Vector3D(0, 0, 0));
196 planeO.GetObject()->GetTransform()->SetScale(Vector3D(s1, 1.0f - s2, s3));
197
198 planeO.GetObject()->GetTransform()->SetRotationOffset(Vector3D(0, 100, 0));
199 planeO.GetObject()->GetTransform()->SetRotation(Vector3D(cs + 45.0f, xs + 90.0f, zs));
200
201 planeO.GetObject()->GetTransform()->SetPosition(Vector3D(96.0f, -48.0f, 0));
202 }
203
204 protoDRV1O.GetObject()->UpdateTransform();
205 initO.GetObject()->UpdateTransform();
206 runningKernelO.GetObject()->UpdateTransform();
207 loadingModulesO.GetObject()->UpdateTransform();
208 doneO.GetObject()->UpdateTransform();
209 cursorO.GetObject()->UpdateTransform();
210 planeO.GetObject()->UpdateTransform();
211 }
212};
Definition Boot.h:24
FunctionGenerator square
Definition Boot.h:42
const int frames
Definition Boot.h:40
RunningKernel runningKernelO
Definition Boot.h:33
DoneBoot doneO
Definition Boot.h:35
void Initialize() override
Initializes the project.
Definition Boot.h:79
SimpleMaterial white
Definition Boot.h:44
CombineMaterial< 2 > textColor
Definition Boot.h:49
LoadingModules loadingModulesO
Definition Boot.h:34
CombineMaterial< 2 > matCombine
Definition Boot.h:48
Plane planeO
Definition Boot.h:37
LightMaterial< 6 > lights
Definition Boot.h:29
ProtoDRV1 protoDRV1O
Definition Boot.h:31
SimpleMaterial blue
Definition Boot.h:45
SimpleMaterial black
Definition Boot.h:46
Init initO
Definition Boot.h:32
Boot()
Definition Boot.h:52
HUB75Controller controller
Definition Boot.h:27
HUB75DeltaCameraManager cameras
Definition Boot.h:26
void Update(float ratio)
Updates the project state based on the given ratio.
Definition Boot.h:83
Cursor cursorO
Definition Boot.h:36
ObjectDeformer planeDeformer
Definition Boot.h:39
Combines multiple materials with specified blending methods and opacities.
void SetOpacity(uint8_t index, float opacity)
Sets the opacity for a specific material.
void AddMaterial(Method method, Material *material, float opacity)
Adds a new material to the combination.
A class to generate various waveform functions with customizable parameters.
@ Square
Square waveform.
float Update()
Updates and calculates the next value of the waveform.
Manages HUB75 LED matrices with camera integration.
void Initialize() override
Initializes the HUB75Controller and sets up the LED matrix.
A material class that incorporates multiple light sources for rendering.
Light * GetLights()
Retrieves the array of lights.
void Set(Vector3D p, Vector3D intensity, float falloff, float a, float b)
Sets the light's properties.
Definition Light.cpp:11
void MoveTo(Vector3D p)
Moves the light to a specified position.
Definition Light.cpp:29
@ Add
Adds colors together.
Definition Material.h:35
@ Replace
Replaces the base color.
Definition Material.h:44
static T Map(T value, T inLow, T inMax, T outMin, T outMax)
Maps a value from one range to another.
static T Constrain(T value, T minimum, T maximum)
Constrains a value between minimum and maximum.
static float CosineInterpolation(float beg, float fin, float ratio)
Applies a cosine-based interpolation between two values.
Applies geometric transformations to one or more 3D objects.
void SineWaveSurfaceDeform(Vector3D offset, float magnitude, float timeRatio, float periodModifier, float frequencyModifier, Axis axis)
Applies a sine wave surface deformation to the object(s).
Represents a plane in 3D space defined by a centroid and a normal vector.
Definition Plane.h:23
Manages animations, rendering, and display operations.
Definition Project.h:31
Scene scene
The Scene object representing the rendered environment.
Definition Project.h:35
Represents an RGB color and provides methods for manipulation.
Definition RGBColor.h:23
void AddObject(Object3D *object)
Adds a 3D object to the scene.
Definition Scene.cpp:31
A material that applies a single, solid RGB color to surfaces.
Represents a 3D vector (X, Y, Z) and provides methods for vector arithmetic.
Definition Vector3D.h:26
static Vector3D LERP(const Vector3D &start, const Vector3D &finish, const float &ratio)
Performs linear interpolation between two Vector3Ds.
Definition Vector3D.cpp:210