ProtoTracer  1.0
Real-time 3D rendering and animation engine
Loading...
Searching...
No Matches
TamamoAnimation.h
Go to the documentation of this file.
1#pragma once
2
3#include "../Animation.h"
4#include "../KeyFrameTrack.h"
5#include "../EasyEaseAnimator.h"
6#include "../../Objects/Background.h"
7#include "../../Objects/LEDStripBackground.h"
8#include "../../Morph/Commissions/TamamoFace.h"
9#include "../../Morph/Commissions/TamamoSec.h"
10#include "../../Render/Scene.h"
11#include "../../Signals/FunctionGenerator.h"
12#include "../../Menu/SingleButtonMenu.h"
13#include "../../Sensors/APDS9960.h"
14
15#include "../../Materials/Animated/RainbowNoise.h"
16#include "../../Materials/Animated/RainbowSpiral.h"
17#include "../../Materials/Animated/SpectrumAnalyzer.h"
18#include "../../Materials/Animated/AudioReactiveGradient.h"
19#include "../../Materials/Animated/Oscilloscope.h"
20
21#include "../../Materials/MaterialAnimator.h"
22
23#include "../AnimationTracks/BlinkTrack.h"
24
25#include "../../Signals/FFTVoiceDetection.h"
26
27#include "../../Sensors/MicrophoneFourier_MAX9814.h"
28
29#include "../../Render/ObjectAlign.h"
30
31#include "../../Screenspace/GlitchX.h"
32#include "../../Screenspace/Fisheye.h"
33#include "../../Screenspace/HorizontalBlur.h"
34#include "../../Screenspace/PhaseOffsetX.h"
35#include "../../Screenspace/PhaseOffsetY.h"
36#include "../../Screenspace/PhaseOffsetR.h"
37#include "../../Screenspace/Magnet.h"
38#include "../../Screenspace/Overflow.h"
39#include "../../Screenspace/RadialBlur.h"
40#include "../../Screenspace/ShiftR.h"
41#include "../../Screenspace/VerticalBlur.h"
42
43class TamamoAnimation : public Animation<4> {
44private:
45 static const uint8_t faceCount = 9;
46 TamamoFace pM;
47 TamamoSec rear;
48 Background background;
49 LEDStripBackground ledStripBackground;
50 EasyEaseAnimator<25> eEA = EasyEaseAnimator<25>(EasyEaseInterpolation::Overshoot, 1.0f, 0.35f);
51
52 //Materials
62
63 RGBColor gradientSpectrum[2] = {RGBColor(253, 81, 27), RGBColor(255, 96, 27)};
65
68
69 SpectrumAnalyzer sA = SpectrumAnalyzer(Vector2D(200, 100), Vector2D(100, 50), true, true);
72
73 //Animation controllers
75
82
86
88
91
93
95
96 ObjectAlign objA = ObjectAlign(Vector2D(0.0f, 0.0f), Vector2D(189.0f, 93.0f), Quaternion());
97 ObjectAlign objARear = ObjectAlign(Vector2D(0.0f, 0.0f), Vector2D(189.0f, 93.0f), Quaternion());
98
110
111 float offsetFace = 0.0f;
112 float offsetFaceSA = 0.0f;
113 float offsetFaceARG = 0.0f;
114 float offsetFaceOSC = 0.0f;
115 uint8_t offsetFaceInd = 50;
116 uint8_t offsetFaceIndSA = 51;
117 uint8_t offsetFaceIndARG = 52;
118 uint8_t offsetFaceIndOSC = 53;
119
121 eEA.AddParameter(pM.GetMorphWeightReference(TamamoFace::Angry), TamamoFace::Angry, 15, 0.0f, 1.0f);
122 eEA.AddParameter(pM.GetMorphWeightReference(TamamoFace::Upset), TamamoFace::Upset, 30, 0.0f, 1.0f);
123 eEA.AddParameter(pM.GetMorphWeightReference(TamamoFace::Sleepy), TamamoFace::Sleepy, 60, 0.0f, 1.0f);
124 eEA.AddParameter(pM.GetMorphWeightReference(TamamoFace::Boop), TamamoFace::Boop, 25, 0.0f, 1.0f);
125 eEA.AddParameter(pM.GetMorphWeightReference(TamamoFace::Confuse), TamamoFace::Confuse, 45, 0.0f, 1.0f);
126 eEA.AddParameter(pM.GetMorphWeightReference(TamamoFace::Error), TamamoFace::Error, 50, 0.0f, 1.0f);
127 eEA.AddParameter(pM.GetMorphWeightReference(TamamoFace::Loading), TamamoFace::Loading, 40, 0.0f, 1.0f);
128 eEA.AddParameter(pM.GetMorphWeightReference(TamamoFace::Happy), TamamoFace::Happy, 20, 0.0f, 1.0f);
129
130 eEA.AddParameter(pM.GetMorphWeightReference(TamamoFace::vrc_v_ee), TamamoFace::vrc_v_ee, 2, 0.0f, 1.0f);
131 eEA.AddParameter(pM.GetMorphWeightReference(TamamoFace::vrc_v_ih), TamamoFace::vrc_v_ih, 2, 0.0f, 1.0f);
132 eEA.AddParameter(pM.GetMorphWeightReference(TamamoFace::vrc_v_dd), TamamoFace::vrc_v_dd, 2, 0.0f, 1.0f);
133 eEA.AddParameter(pM.GetMorphWeightReference(TamamoFace::vrc_v_rr), TamamoFace::vrc_v_rr, 2, 0.0f, 1.0f);
134 eEA.AddParameter(pM.GetMorphWeightReference(TamamoFace::vrc_v_ch), TamamoFace::vrc_v_ch, 2, 0.0f, 1.0f);
135 eEA.AddParameter(pM.GetMorphWeightReference(TamamoFace::vrc_v_aa), TamamoFace::vrc_v_aa, 2, 0.0f, 1.0f);
136 eEA.AddParameter(pM.GetMorphWeightReference(TamamoFace::vrc_v_oh), TamamoFace::vrc_v_oh, 2, 0.0f, 1.0f);
137 eEA.AddParameter(pM.GetMorphWeightReference(TamamoFace::vrc_v_ss), TamamoFace::vrc_v_ss, 2, 0.0f, 1.0f);
138
139 eEA.AddParameter(&offsetFace, offsetFaceInd, 40, 0.0f, 1.0f);
140 eEA.AddParameter(&offsetFaceSA, offsetFaceIndSA, 40, 0.0f, 1.0f);
143 }
144
146 blink.AddParameter(pM.GetMorphWeightReference(TamamoFace::Blink));
147
148 hTrack.AddParameter(rear.GetMorphWeightReference(TamamoSec::H));
149 lTrack.AddParameter(rear.GetMorphWeightReference(TamamoSec::L));
150 }
151
153 eEA.SetInterpolationMethod(TamamoFace::Confuse, EasyEaseInterpolation::Cosine);
154 eEA.SetInterpolationMethod(TamamoFace::Error, EasyEaseInterpolation::Cosine);
155 eEA.SetInterpolationMethod(TamamoFace::Angry, EasyEaseInterpolation::Cosine);
156 eEA.SetInterpolationMethod(TamamoFace::Loading, EasyEaseInterpolation::Cosine);
157
158 eEA.SetInterpolationMethod(TamamoFace::vrc_v_ee, EasyEaseInterpolation::Linear);
159 eEA.SetInterpolationMethod(TamamoFace::vrc_v_ih, EasyEaseInterpolation::Linear);
160 eEA.SetInterpolationMethod(TamamoFace::vrc_v_dd, EasyEaseInterpolation::Linear);
161 eEA.SetInterpolationMethod(TamamoFace::vrc_v_rr, EasyEaseInterpolation::Linear);
162 eEA.SetInterpolationMethod(TamamoFace::vrc_v_ch, EasyEaseInterpolation::Linear);
163 eEA.SetInterpolationMethod(TamamoFace::vrc_v_aa, EasyEaseInterpolation::Linear);
164 eEA.SetInterpolationMethod(TamamoFace::vrc_v_oh, EasyEaseInterpolation::Linear);
165 eEA.SetInterpolationMethod(TamamoFace::vrc_v_ss, EasyEaseInterpolation::Linear);
166 }
167
185
187 hTrack.AddKeyFrame(0.0f, 0.0f);
188 lTrack.AddKeyFrame(0.0f, 0.0f);
189
190 hTrack.AddKeyFrame(3.0f, 1.0f);
191 lTrack.AddKeyFrame(3.0f, 0.0f);
192
193 hTrack.AddKeyFrame(6.0f, 1.0f);
194 lTrack.AddKeyFrame(6.0f, 0.0f);
195
196 hTrack.AddKeyFrame(9.0f, 0.0f);
197 lTrack.AddKeyFrame(9.0f, 1.0f);
198
199 hTrack.AddKeyFrame(12.0f, 0.0f);
200 lTrack.AddKeyFrame(12.0f, 1.0f);
201
202 hTrack.AddKeyFrame(15.0f, 0.0f);
203 lTrack.AddKeyFrame(15.0f, 0.0f);
204
205 hTrack.AddKeyFrame(18.0f, 0.0f);
206 lTrack.AddKeyFrame(18.0f, 0.0f);
207 }
208
210 hTrack.Update();
211 lTrack.Update();
212
213 blink.Update();
214 }
215
216 void Default(){
217 scene.DisableEffect();
218 }
219
220 void Angry(){
221 eEA.AddParameterFrame(TamamoFace::Angry, 1.0f);
223 }
224
225 void Upset(){
226 eEA.AddParameterFrame(TamamoFace::Upset, 1.0f);
227 }
228
229 void Sleepy(){
230 eEA.AddParameterFrame(TamamoFace::Sleepy, 1.0f);
231 }
232
233 void Boop(){
234 scene.SetEffect(&glitchX);
235 scene.DisableEffect();
236
237 eEA.AddParameterFrame(TamamoFace::Boop, 1.0f);
239 }
240
241 void Confuse(){
242 eEA.AddParameterFrame(TamamoFace::Confuse, 1.0f);
243 }
244
245 void Error(){
246 eEA.AddParameterFrame(TamamoFace::Error, 1.0f);
247 }
248
249 void Loading(){
250 eEA.AddParameterFrame(TamamoFace::Loading, 1.0f);
251 }
252
253 void Happy(){
254 eEA.AddParameterFrame(TamamoFace::Happy, 1.0f);
255 }
256
263
270
277
280 eEA.AddParameterFrame(TamamoFace::vrc_v_ss, MicrophoneFourierIT::GetCurrentMagnitude() / 2.0f);
281
282 if(MicrophoneFourierIT::GetCurrentMagnitude() > 0.05f){
283 voiceDetection.Update(MicrophoneFourierIT::GetFourierFiltered(), MicrophoneFourierIT::GetSampleRate());
284
292 }
293 }
294 }
295
297 switch(Menu::GetFaceColor()){
298 case 1: materialAnimator.AddMaterialFrame(redMaterial, 0.8f); break;
300 case 3: materialAnimator.AddMaterialFrame(whiteMaterial, 0.8f); break;
301 case 4: materialAnimator.AddMaterialFrame(greenMaterial, 0.8f); break;
302 case 5: materialAnimator.AddMaterialFrame(blueMaterial, 0.8f); break;
305 case 8: materialAnimator.AddMaterialFrame(rainbowSpiral, 0.8f); break;
306 case 9: materialAnimator.AddMaterialFrame(rainbowNoise, 0.8f); break;
307 default: break;
308 }
309 }
310
312 hTrack.Update();
313 lTrack.Update();
314 }
315
316public:
318 scene.AddObject(pM.GetObject());
319 scene.AddObject(rear.GetObject());
320 scene.AddObject(background.GetObject());
321 scene.AddObject(ledStripBackground.GetObject());
322
323 LinkEasyEase();
325
327
329
331
332 pM.GetObject()->SetMaterial(&materialAnimator);
333 rear.GetObject()->SetMaterial(&materialAnimator);
334 background.GetObject()->SetMaterial(&backgroundMaterial);
335 ledStripBackground.GetObject()->SetMaterial(&materialAnimator);
336
337 boop.Initialize(5);
338
339 MicrophoneFourierIT::Initialize(22, 8000, 50.0f, 120.0f);//8KHz sample rate, 50dB min, 120dB max
340 //Menu::Initialize(9);//NeoTrellis
341 Menu::Initialize(11, 0, 500);//7 is number of faces
342
344 objA.SetMirrorX(true);
345
347 objARear.SetMirrorX(true);
348 }
349
352 };
353
354 uint8_t GetBrightness(){
355 return Menu::GetBrightness();
356 };
357
358 void FadeIn(float stepRatio) override {}
359 void FadeOut(float stepRatio) override {}
360
362 return pM.GetObject();
363 }
364
365 void Update(float ratio) override {
366 pM.Reset();
367 rear.Reset();
368
369 float xOffset = fGenMatXMove.Update();
370 float yOffset = fGenMatYMove.Update();
371
372 Menu::Update(ratio);
373
374 //Menu::SetSize(Vector2D(280, 60));
375 //Menu::SetPositionOffset(Vector2D(0.0f, -30.0f * yOffset));
376
377 //glitchX.SetRatio(fGenBlur.Update());
378 magnet.SetRatio(ratio);
387
389
390 bool isBooped = Menu::UseBoopSensor() ? boop.isBooped() : 0;
391 uint8_t mode = Menu::GetFaceState();//change by button press
392
393 MicrophoneFourierIT::Update();
394 sA.SetHueAngle(ratio * 360.0f * 4.0f);
397
398 aRG.SetRadius((xOffset + 2.0f) * 2.0f + 25.0f);
399 aRG.SetSize(Vector2D((xOffset + 2.0f) * 10.0f + 50.0f, (xOffset + 2.0f) * 10.0f + 50.0f));
400 aRG.SetHueAngle(ratio * 360.0f * 8.0f);
401 aRG.SetRotation(ratio * 360.0f * 2.0f);
402 aRG.SetPosition(Vector2D(80.0f + xOffset * 4.0f, 48.0f + yOffset * 4.0f));
403
404 oSC.SetSize(Vector2D(200.0f, 100.0f));
405 oSC.SetHueAngle(ratio * 360.0f * 8.0f);
406 oSC.SetPosition(Vector2D(100.0f, 50.0f));
407
408 //gradientMat.HueShift(ratio * 720.0f);
409
410 voiceDetection.SetThreshold(map(Menu::GetMicLevel(), 0, 10, 1000, 50));
411
413
414 if(isBooped){
415 Boop();
416 }
417 else{
418 if (mode == 0) Default();
419 else if (mode == 1) Angry();
420 else if (mode == 2) Upset();
421 else if (mode == 3) Sleepy();
422 else if (mode == 4) Confuse();
423 else if (mode == 5) Error();
424 else if (mode == 6) Loading();
425 else if (mode == 7) Happy();
426 else if (mode == 8) {
427 aRG.Update(MicrophoneFourierIT::GetFourierFiltered());
429 }
430 else if (mode == 9){
431 oSC.Update(MicrophoneFourierIT::GetSamples());
433 }
434 else {
435 sA.Update(MicrophoneFourierIT::GetFourierFiltered());
437 }
438 }
439
441
442 eEA.Update();
443 pM.Update();
444 rear.Update();
445
446 //phaseR.SetRatio(eEA.GetValue(TamamoFace::Surprised));
447 //glitchX.SetRatio(eEA.GetValue(TamamoFace::Surprised));
448
449 rainbowNoise.Update(ratio);
450 rainbowSpiral.Update(ratio);
453
454 uint8_t faceSize = Menu::GetFaceSize();
455 float scale = Menu::ShowMenu() * 0.6f + 0.4f;
456 float faceSizeOffset = faceSize * 8.0f;
457
459 objA.SetEdgeMargin(4.0f);
460 objA.SetCameraMax(Vector2D(110.0f + faceSizeOffset, 107.5f - 107.5f * offsetFace).Multiply(scale));
461
462 objA.AlignObjects(scene.GetObjects(), 1);
463
464 pM.GetObject()->GetTransform()->SetPosition(Vector3D(xOffset, yOffset, 0.0f));
465 pM.GetObject()->UpdateTransform();
466
469 objARear.SetCameraMax(Vector2D(80.0f, 80.0f).Multiply(scale));
470
471 objARear.AlignObjectNoScale(rear.GetObject());
472
473 rear.GetObject()->GetTransform()->SetPosition(Vector3D(xOffset + 345.0f, yOffset + 35.0f, 0.0f));
474 rear.GetObject()->GetTransform()->SetRotation(Vector3D(0.0f, 0.0f, 70.0f));
475 rear.GetObject()->GetTransform()->SetScale(Vector3D(1.3f, 1.3f, 1.0f));
476 rear.GetObject()->UpdateTransform();
477 }
478};
A class for managing the Adafruit APDS9960 sensor.
Definition APDS9960.h:27
static bool Initialize(uint8_t threshold)
Initializes the APDS9960 sensor.
Definition APDS9960.cpp:14
static bool isBooped()
Checks if the sensor is "booped" (close proximity detected).
Definition APDS9960.cpp:43
void AddParameter(float *parameter)
Adds a parameter to the animation track.
float Update()
Updates the animation track and returns the current parameter value.
A material class for creating an audio-reactive gradient effect.
void SetRadius(float radius)
Sets the radius for circular gradient patterns.
void SetPosition(Vector2D offset)
Sets the position of the gradient.
void Update(float *readData)
Updates the gradient based on new audio data.
void SetSize(Vector2D size)
Sets the size of the gradient.
void SetRotation(float angle)
Sets the rotation angle of the gradient.
void SetHueAngle(float hueAngle)
Sets the hue angle for color adjustments.
A template class for animating eye blinking using keyframes.
Definition BlinkTrack.h:27
A template class for implementing advanced animation easing.
void AddParameterFrame(uint16_t dictionaryValue, float value) override
Adds a single frame value for a parameter.
void Update() override
Updates the animator, advancing all animations.
void SetInterpolationMethod(uint16_t dictionaryValue, InterpolationMethod interpMethod) override
Sets the interpolation method for a specific parameter.
void AddParameter(float *parameter, uint16_t dictionaryValue, uint16_t frames, float basis, float goal) override
Adds a parameter to the animator.
void SetRatio(float ratio)
Sets the scaling ratio for the effect.
Definition Effect.cpp:5
Detects visemes based on FFT voice analysis.
float GetViseme(MouthShape viseme)
Retrieves the probability of a specific viseme.
void SetThreshold(float threshold)
Sets the threshold for formant calculations.
void Update(float *peaks, float maxFrequency)
Updates the viseme probabilities based on new FFT data.
Implements a fisheye distortion effect for pixel groups.
Definition Fisheye.h:26
A class to generate various waveform functions with customizable parameters.
@ Sine
Sine waveform.
@ Triangle
Triangle waveform.
float Update()
Updates and calculates the next value of the waveform.
Implements a glitch effect along the X-axis for pixel groups.
Definition GlitchX.h:26
Creates a customizable gradient material for rendering.
Implements a horizontal blur effect for pixel groups.
@ Cosine
Smooth cosine interpolation.
A template class for managing animations with multiple parameters and keyframes.
void AddParameter(float *parameter)
Adds a parameter to the track.
void AddKeyFrame(float time, float value)
Adds a keyframe to the track.
float Update()
Updates the animation track and computes the new parameter value.
Implements a magnetic distortion effect for pixel groups.
Definition Magnet.h:25
Animates transitions and blends between multiple materials.
void AddMaterial(Material::Method method, Material *material, uint16_t frames, float minOpacity, float maxOpacity)
Adds a material to the animation with specified properties.
void SetBaseMaterial(Material::Method method, Material *material)
Sets the base material for the animation.
void AddMaterialFrame(Material &material, float opacity)
Adds a specific frame for a material in the animation.
void Update()
Updates the animator, advancing the transitions.
@ Add
Adds colors together.
Definition Material.h:35
@ Replace
Replaces the base color.
Definition Material.h:44
static uint8_t GetFaceState()
Retrieves the current face state. In hardware mode, it is read from the MenuHandler.
Definition Menu.cpp:381
static uint8_t GetFaceColor()
Gets the current face color index.
Definition Menu.cpp:453
static uint8_t GetMicLevel()
Gets the current microphone level.
Definition Menu.cpp:417
static float ShowMenu()
Returns how much of the menu is shown, typically normalized (0.0 to 1.0).
Definition Menu.cpp:494
static Material * GetMaterial()
Provides a pointer to the material used for rendering the menu text.
Definition Menu.cpp:155
static uint8_t MirrorSpectrumAnalyzer()
Checks if the spectrum analyzer mirroring is toggled on or off.
Definition Menu.cpp:435
static uint8_t GetFaceSize()
Gets the current face size.
Definition Menu.cpp:444
static void Initialize(uint8_t faceCount, uint8_t pin, uint16_t holdingTime, Vector2D size=Vector2D(240, 50))
Initializes the Menu using a face count, input pin, holding time, and size.
Definition Menu.cpp:102
static uint8_t UseMicrophone()
Checks if the microphone usage is toggled on or off.
Definition Menu.cpp:408
static uint8_t UseBoopSensor()
Checks if the boop sensor usage is toggled on or off.
Definition Menu.cpp:426
static void Update(float ratio)
Updates the menu each frame, handling transitions, wiggle effects, and text generation.
Definition Menu.cpp:208
static uint8_t GetBrightness()
Gets the current brightness level. In hardware mode, it is read from the MenuHandler.
Definition Menu.cpp:390
static uint8_t GetAccentBrightness()
Gets the current accent brightness level.
Definition Menu.cpp:399
Represents a 3D object with geometry, material, and transformation data.
Definition Object3D.h:28
Handles aligning and transforming 3D objects to fit within specified 2D camera bounds.
Definition ObjectAlign.h:24
void SetEdgeMargin(float edgeMargin)
Sets the margin to keep from the edges when aligning objects.
void AlignObjectNoScale(Object3D *obj)
Aligns a single Object3D within the camera bounds without applying the object's scaling factor.
@ Stretch
Attempt to scale the object(s) to fill the entire area.
Definition ObjectAlign.h:43
@ Middle
Center the object within the bounding area.
Definition ObjectAlign.h:38
void SetJustification(Justification jst)
Sets the justification mode for alignment.
void SetPlaneOffsetAngle(float offsetPlaneAngle)
Sets the additional rotation offset (plane offset angle), in degrees or radians, that will be applied...
void SetCameraMax(Vector2D camMax)
Updates the maximum bounds for the 2D camera region.
void AlignObjects(Object3D **objs, uint8_t numObjects)
Aligns multiple objects within the camera bounds, including scale factors.
void SetMirrorX(bool mirrorX)
Enables or disables mirroring along the X-axis for the aligned objects.
A dynamic oscilloscope material for visualizing audio signals.
void SetPosition(Vector2D offset)
Sets the position of the oscilloscope visualization.
void SetSize(Vector2D size)
Sets the size of the oscilloscope visualization.
void Update(float *data)
Updates the oscilloscope visualization based on new audio data.
void SetHueAngle(float hueAngle)
Sets the hue angle for color adjustments.
Implements an overflow distortion effect for pixel groups.
Definition Overflow.h:24
Applies rotational phase offsets to pixel groups.
Applies horizontal phase offsets to pixel groups.
Applies vertical phase offsets to pixel groups.
A mathematical construct representing a rotation in 3D space.
Definition Quaternion.h:30
Represents an RGB color and provides methods for manipulation.
Definition RGBColor.h:23
Applies a radial blur effect to pixel groups.
Definition RadialBlur.h:26
A dynamic material that creates a rainbow effect using simplex noise.
void Update(float ratio)
Updates the material animation based on the time ratio.
A dynamic material creating a colorful rainbow spiral animation.
void Update(float ratio)
Updates the material animation based on the time ratio.
Radially shifts the red, green, and blue channels of the pixels.
Definition ShiftR.h:26
A material that applies a single, solid RGB color to surfaces.
A material that visualizes audio data as a spectrum.
void SetMirrorYState(bool state)
Sets the mirroring state for the visualization.
void Update(float *readData)
Updates the spectrum visualization with new audio data.
void SetFlipYState(bool state)
Sets the flipping state for the visualization.
void SetHueAngle(float hueAngle)
Sets the hue adjustment angle for the spectrum colors.
FunctionGenerator fGenMatHue
SimpleMaterial greenMaterial
FunctionGenerator fGenMatYMove
SpectrumAnalyzer sA
KeyFrameTrack< 1, 10 > hTrack
Oscilloscope oSC
SimpleMaterial redMaterial
PhaseOffsetR phaseR
RainbowSpiral rainbowSpiral
SimpleMaterial blueMaterial
FunctionGenerator fGenMatRMenu
PhaseOffsetX phaseX
void AudioReactiveGradientFace()
SimpleMaterial yellowMaterial
VerticalBlur blurV
EasyEaseAnimator< 25 > eEA
BlinkTrack< 1 > blink
LEDStripBackground ledStripBackground
void ChangeInterpolationMethods()
KeyFrameTrack< 1, 10 > lTrack
GradientMaterial< 2 > gradientMat
FunctionGenerator fGenMatPos
FunctionGenerator fGenScale
Background background
FunctionGenerator fGenRotation
SimpleMaterial orangeMaterial
FunctionGenerator fGenMatXMenu
PhaseOffsetY phaseY
void FadeIn(float stepRatio) override
void FadeOut(float stepRatio) override
RainbowNoise rainbowNoise
FunctionGenerator fGenMatYMenu
FunctionGenerator fGenMatXMove
MaterialAnimator< 10 > materialAnimator
SimpleMaterial purpleMaterial
void Update(float ratio) override
static const uint8_t faceCount
FFTVoiceDetection< 128 > voiceDetection
ObjectAlign objARear
FunctionGenerator fGenBlur
RGBColor gradientSpectrum[2]
MaterialAnimator< 4 > backgroundMaterial
HorizontalBlur blurH
uint8_t GetBrightness()
uint8_t GetAccentBrightness()
Object3D * GetObject()
SimpleMaterial whiteMaterial
AudioReactiveGradient aRG
Represents a 2D vector (X, Y) and provides methods for vector arithmetic.
Definition Vector2D.h:27
Represents a 3D vector (X, Y, Z) and provides methods for vector arithmetic.
Definition Vector3D.h:26
An effect that applies a vertical blur to a pixel group.
@ ER
Mouth shape corresponding to the "ER" sound.
@ OO
Mouth shape corresponding to the "OO" sound.
@ AH
Mouth shape corresponding to the "AH" sound.
@ UH
Mouth shape corresponding to the "UH" sound.
@ AR
Mouth shape corresponding to the "AR" sound.
@ EE
Mouth shape corresponding to the "EE" sound.