ProtoTracer  1.0
Real-time 3D rendering and animation engine
Loading...
Searching...
No Matches
XenraxAnimation.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/LEDStripBackgroundWS35.h"
8
9#include "../../Morph/Commissions/XenraxFace.h"
10
11#include "../../Render/Scene.h"
12#include "../../Signals/FunctionGenerator.h"
13#include "../../Menu/SingleButtonMenu.h"
14#include "../../Sensors/APDS9960.h"
15#include "../../Sensors/MMC56X3.h"
16
17#include "../../Materials/Animated/RainbowNoise.h"
18#include "../../Materials/Animated/RainbowSpiral.h"
19#include "../../Materials/Animated/SpectrumAnalyzer.h"
20#include "../../Materials/Animated/AudioReactiveGradient.h"
21#include "../../Materials/Animated/Oscilloscope.h"
22
23#include "../../Materials/MaterialAnimator.h"
24
25#include "../AnimationTracks/BlinkTrack.h"
26
27#include "../../Signals/FFTVoiceDetection.h"
28
29#include "../../Sensors/MicrophoneFourier_MAX9814.h"
30
31#include "../../Render/ObjectAlign.h"
32
33#include "../../Screenspace/GlitchX.h"
34#include "../../Screenspace/Fisheye.h"
35#include "../../Screenspace/HorizontalBlur.h"
36#include "../../Screenspace/PhaseOffsetX.h"
37#include "../../Screenspace/PhaseOffsetY.h"
38#include "../../Screenspace/PhaseOffsetR.h"
39#include "../../Screenspace/Magnet.h"
40#include "../../Screenspace/Overflow.h"
41#include "../../Screenspace/RadialBlur.h"
42#include "../../Screenspace/ShiftR.h"
43#include "../../Screenspace/VerticalBlur.h"
44#include "../../Screenspace/Test.h"
45
46class XenraxAnimation : public Animation<6> {
47private:
48 static const uint8_t faceCount = 9;
49 XenraxFace pM;
50 Background background;
51 LEDStripBackgroundWS35 ledStripBackground;
52 EasyEaseAnimator<30> eEA = EasyEaseAnimator<30>(EasyEaseInterpolation::Overshoot, 1.0f, 0.35f);
53
54 //Materials
65
66 RGBColor gradientSpectrum[2] = {RGBColor(85, 243, 226), RGBColor(67, 192, 178)};
68
69 RGBColor batterySpectrum[2] = {RGBColor(253, 0, 99), RGBColor(82, 246, 229)};
71
72 RGBColor audioSpectrum[3] = {RGBColor(255, 165, 0), RGBColor(128, 0, 128), RGBColor(0, 255, 65)};
74
77
78 SpectrumAnalyzer sA = SpectrumAnalyzer(Vector2D(200, 100), Vector2D(100, 50), true, true);
81
82 //Animation controllers
84
91
95
98
100
103
105
106 ObjectAlign objA = ObjectAlign(Vector2D(0.0f, 0.0f), Vector2D(170.0f, 125.0f), Quaternion());
107
120
121 float offsetFace = 0.0f;
122 float offsetFaceSA = 0.0f;
123 float offsetFaceARG = 0.0f;
124 float offsetFaceOSC = 0.0f;
125 float magnetSK = 0.0f;
126 uint8_t offsetFaceInd = 50;
127 uint8_t offsetFaceIndSA = 51;
128 uint8_t offsetFaceIndARG = 52;
129 uint8_t offsetFaceIndOSC = 53;
130 uint8_t magnetSKInd = 54;
131
133 eEA.AddParameter(pM.GetMorphWeightReference(XenraxFace::Battery), XenraxFace::Battery, 30, 0.0f, 1.0f);
134 eEA.AddParameter(pM.GetMorphWeightReference(XenraxFace::BatteryFull), XenraxFace::BatteryFull, 10, 0.0f, 1.0f);
135 eEA.AddParameter(pM.GetMorphWeightReference(XenraxFace::Boop), XenraxFace::Boop, 5, 0.0f, 1.0f);
136 eEA.AddParameter(pM.GetMorphWeightReference(XenraxFace::Angry), XenraxFace::Angry, 15, 0.0f, 1.0f);
137 eEA.AddParameter(pM.GetMorphWeightReference(XenraxFace::Hypno), XenraxFace::Hypno, 45, 0.0f, 1.0f);
138 eEA.AddParameter(pM.GetMorphWeightReference(XenraxFace::Hearts), XenraxFace::Hearts, 30, 0.0f, 1.0f);
139 eEA.AddParameter(pM.GetMorphWeightReference(XenraxFace::Sleeping), XenraxFace::Sleeping, 30, 0.0f, 1.0f);
140 eEA.AddParameter(pM.GetMorphWeightReference(XenraxFace::Dead), XenraxFace::Dead, 30, 0.0f, 1.0f);
141 eEA.AddParameter(pM.GetMorphWeightReference(XenraxFace::BSOD), XenraxFace::BSOD, 30, 0.0f, 1.0f);
142 eEA.AddParameter(pM.GetMorphWeightReference(XenraxFace::SpinSpiral), XenraxFace::SpinSpiral, 5, 0.0f, 1.0f);
143 eEA.AddParameter(pM.GetMorphWeightReference(XenraxFace::HideSpiral), XenraxFace::HideSpiral, 30, 1.0f, 0.0f);
144 eEA.AddParameter(pM.GetMorphWeightReference(XenraxFace::MoveZZZ), XenraxFace::MoveZZZ, 5, 0.0f, 1.0f);
145 eEA.AddParameter(pM.GetMorphWeightReference(XenraxFace::HideZZZ), XenraxFace::HideZZZ, 30, 1.0f, 0.0f);
146 eEA.AddParameter(pM.GetMorphWeightReference(XenraxFace::MoveHearts), XenraxFace::MoveHearts, 5, 0.0f, 1.0f);
147 eEA.AddParameter(pM.GetMorphWeightReference(XenraxFace::HideHearts), XenraxFace::HideHearts, 30, 1.0f, 0.0f);
148
149 eEA.AddParameter(pM.GetMorphWeightReference(XenraxFace::vrc_v_ee), XenraxFace::vrc_v_ee, 2, 0.0f, 1.0f);
150 eEA.AddParameter(pM.GetMorphWeightReference(XenraxFace::vrc_v_ih), XenraxFace::vrc_v_ih, 2, 0.0f, 1.0f);
151 eEA.AddParameter(pM.GetMorphWeightReference(XenraxFace::vrc_v_dd), XenraxFace::vrc_v_dd, 2, 0.0f, 1.0f);
152 eEA.AddParameter(pM.GetMorphWeightReference(XenraxFace::vrc_v_rr), XenraxFace::vrc_v_rr, 2, 0.0f, 1.0f);
153 eEA.AddParameter(pM.GetMorphWeightReference(XenraxFace::vrc_v_ch), XenraxFace::vrc_v_ch, 2, 0.0f, 1.0f);
154 eEA.AddParameter(pM.GetMorphWeightReference(XenraxFace::vrc_v_aa), XenraxFace::vrc_v_aa, 2, 0.0f, 1.0f);
155 eEA.AddParameter(pM.GetMorphWeightReference(XenraxFace::vrc_v_oh), XenraxFace::vrc_v_oh, 2, 0.0f, 1.0f);
156 eEA.AddParameter(pM.GetMorphWeightReference(XenraxFace::vrc_v_ss), XenraxFace::vrc_v_ss, 2, 0.0f, 1.0f);
157
158 eEA.AddParameter(&offsetFace, offsetFaceInd, 40, 0.0f, 1.0f);
159 eEA.AddParameter(&offsetFaceSA, offsetFaceIndSA, 40, 0.0f, 1.0f);
162 eEA.AddParameter(&magnetSK, magnetSKInd, 40, 0.0f, 1.0f);
163 }
164
166 blink.AddParameter(pM.GetMorphWeightReference(XenraxFace::Blink));
167 }
168
170 eEA.SetInterpolationMethod(XenraxFace::vrc_v_ee, EasyEaseInterpolation::Linear);
171 eEA.SetInterpolationMethod(XenraxFace::vrc_v_ih, EasyEaseInterpolation::Linear);
172 eEA.SetInterpolationMethod(XenraxFace::vrc_v_dd, EasyEaseInterpolation::Linear);
173 eEA.SetInterpolationMethod(XenraxFace::vrc_v_rr, EasyEaseInterpolation::Linear);
174 eEA.SetInterpolationMethod(XenraxFace::vrc_v_ch, EasyEaseInterpolation::Linear);
175 eEA.SetInterpolationMethod(XenraxFace::vrc_v_aa, EasyEaseInterpolation::Linear);
176 eEA.SetInterpolationMethod(XenraxFace::vrc_v_oh, EasyEaseInterpolation::Linear);
177 eEA.SetInterpolationMethod(XenraxFace::vrc_v_ss, EasyEaseInterpolation::Linear);
178
179 eEA.SetInterpolationMethod(magnetSKInd, EasyEaseInterpolation::Cosine);
180 }
181
189 materialAnimator.AddMaterial(Material::Replace, &redMaterial, 40, 0.0f, 1.0f);//layer 6
192 materialAnimator.AddMaterial(Material::Replace, &rainbowNoise, 40, 0.15f, 1.0f);//layer 9
193 materialAnimator.AddMaterial(Material::Replace, &pinkMaterial, 40, 0.0f, 1.0f);//layer 10
194 materialAnimator.AddMaterial(Material::Replace, &batteryGrad, 40, 0.0f, 1.0f);//layer 11
195 materialAnimator.AddMaterial(Material::Replace, &audioGrad, 40, 0.0f, 1.0f);//layer 12
196
202 }
203
205 blink.Update();
206 }
207
208 void Default(){
209 //scene.SetEffect(&screenspaceTest);
210 scene.DisableEffect();
211
212 blink.Play();
213 }
214
215 void Battery(){
216 scene.DisableEffect();
217
218 eEA.AddParameterFrame(XenraxFace::Battery, 1.0f);
219 eEA.AddParameterFrame(XenraxFace::BatteryFull, fGenBattery.Update());
221
223
224 blink.Pause();
225 }
226
227 void Boop(){
228 scene.DisableEffect();
229
230 eEA.AddParameterFrame(XenraxFace::Boop, 1.0f);
232
233 blink.Play();
234 }
235
236 void Angry(){
237 scene.DisableEffect();
238
239 eEA.AddParameterFrame(XenraxFace::Angry, 1.0f);
241
242 blink.Play();
243 }
244
245 void Hypno(){
246 scene.SetEffect(&magnet);
247 scene.EnableEffect();
248
249 eEA.AddParameterFrame(XenraxFace::Hypno, 1.0f);
250 eEA.AddParameterFrame(XenraxFace::HideSpiral, 0.0f);
251 eEA.AddParameterFrame(XenraxFace::SpinSpiral, fGenMove.Update());
253
254 blink.Pause();
255 }
256
257 void Hearts(){
258 scene.DisableEffect();
259
260 eEA.AddParameterFrame(XenraxFace::Hearts, 1.0f);
261 eEA.AddParameterFrame(XenraxFace::HideHearts, 0.0f);
262 eEA.AddParameterFrame(XenraxFace::MoveHearts, fGenMove.Update());
263
264 blink.Play();
265 }
266
267 void Sleeping(){
268 scene.DisableEffect();
269
270 eEA.AddParameterFrame(XenraxFace::Sleeping, 1.0f);
271 eEA.AddParameterFrame(XenraxFace::HideZZZ, 0.0f);
272 eEA.AddParameterFrame(XenraxFace::MoveZZZ, fGenMove.Update());
273
274 blink.Pause();
275 }
276
277 void Dead(){
278 scene.DisableEffect();
279
280 eEA.AddParameterFrame(XenraxFace::Dead, 1.0f);
281 //materialAnimator.AddMaterialFrame(redMaterial, 1.0f);
282
283 blink.Pause();
284 }
285
286 void BSOD(){
287 scene.SetEffect(&magnet);
288 scene.EnableEffect();
289
290 eEA.AddParameterFrame(XenraxFace::BSOD, 1.0f);
293
294 blink.Pause();
295 }
296
306
316
326
329 eEA.AddParameterFrame(XenraxFace::vrc_v_ss, MicrophoneFourierIT::GetCurrentMagnitude() / 2.0f);
330
331 if(MicrophoneFourierIT::GetCurrentMagnitude() > 0.05f){
332 voiceDetection.Update(MicrophoneFourierIT::GetFourierFiltered(), MicrophoneFourierIT::GetSampleRate());
333
341 }
342 }
343 }
344
346 switch(Menu::GetFaceColor()){
347 case 1: materialAnimator.AddMaterialFrame(redMaterial, 0.8f); break;
349 case 3: materialAnimator.AddMaterialFrame(whiteMaterial, 0.8f); break;
350 case 4: materialAnimator.AddMaterialFrame(greenMaterial, 0.8f); break;
351 case 5: materialAnimator.AddMaterialFrame(blueMaterial, 0.8f); break;
354 case 8: materialAnimator.AddMaterialFrame(rainbowSpiral, 0.8f); break;
355 case 9: materialAnimator.AddMaterialFrame(rainbowNoise, 0.8f); break;
356 default: break;
357 }
358 }
359
360public:
362 scene.AddObject(pM.GetObject());
363 scene.AddObject(background.GetObject());
364 scene.AddObject(ledStripBackground.GetObject());
365
366 LinkEasyEase();
368
370
372
373 pM.GetObject()->SetMaterial(&materialAnimator);
374 background.GetObject()->SetMaterial(&backgroundMaterial);
375 ledStripBackground.GetObject()->SetMaterial(&materialAnimator);
376
377 boop.Initialize(5);
378 //magnetometer.Initialize();
379
380 MicrophoneFourierIT::Initialize(22, 8000, 50.0f, 120.0f);//8KHz sample rate, 50dB min, 120dB max
381 //Menu::Initialize(9);//NeoTrellis
382 Menu::Initialize(10, 0, 500);//11 is number of faces
383
384 pinMode(3, INPUT);//Hall effect sensor
385
387 objA.SetMirrorX(true);
388 }
389
392 };
393
394 uint8_t GetBrightness(){
395 return Menu::GetBrightness();
396 };
397
398 void FadeIn(float stepRatio) override {}
399 void FadeOut(float stepRatio) override {}
400
402 return pM.GetObject();
403 }
404
405 void Update(float ratio) override {
406 pM.Reset();
407
408 //bool magnetBoop = !digitalRead(3);
409
410
411
412 float xOffset = fGenMatXMove.Update();
413 float yOffset = fGenMatYMove.Update();
414
415 Menu::Update(ratio);
416
417 //Menu::SetSize(Vector2D(280, 60));
418 //Menu::SetPositionOffset(Vector2D(0.0f, -30.0f * yOffset));
419
420 //glitchX.SetRatio(fGenBlur.Update());
421 magnet.SetRatio(ratio);
430
431 audioGrad.GradientShift(ratio * 2.0f);
432 //audioGrad.SetPositionOffset(Vector2D)
433 //audioGrad.SetRotationAngle(fGenMove.Update());
434
436
437 bool isBooped = Menu::UseBoopSensor() ? boop.isBooped() : 0;
438 Vector3D fieldPosition;// = magnetometer.EstimateMagnetPosition();
439 bool isMagn = false;// = magnetometer.IsDetected();
440
441 //magnet.SetAmplitude(magnetometer.GetMagnitude());
442 magnet.SetPosition(Vector2D(fieldPosition.X - 80.0f, fieldPosition.Y + 50.0f));
443
445
446 uint8_t mode = Menu::GetFaceState();//change by button press
447
448 MicrophoneFourierIT::Update();
449 sA.SetHueAngle(ratio * 360.0f * 4.0f);
452
453 aRG.SetRadius((xOffset + 2.0f) * 2.0f + 25.0f);
454 aRG.SetSize(Vector2D((xOffset + 2.0f) * 10.0f + 50.0f, (xOffset + 2.0f) * 10.0f + 50.0f));
455 aRG.SetHueAngle(ratio * 360.0f * 8.0f);
456 aRG.SetRotation(ratio * 360.0f * 2.0f);
457 aRG.SetPosition(Vector2D(80.0f + xOffset * 4.0f, 48.0f + yOffset * 4.0f));
458
459 oSC.SetSize(Vector2D(200.0f, 100.0f));
460 oSC.SetHueAngle(ratio * 360.0f * 8.0f);
461 oSC.SetPosition(Vector2D(100.0f, 50.0f));
462
463 voiceDetection.SetThreshold(map(Menu::GetMicLevel(), 0, 10, 1000, 50));
464
466
467 if (isBooped && mode != 6){
468 Boop();
469 }
470 else if(isMagn && mode != 6){
471 Hypno();
472 }
473 else{
474 if (mode == 0) Default();
475 else if (mode == 1) Battery();
476 else if (mode == 2) Angry();
477 else if (mode == 3) Hearts();
478 else if (mode == 4) Sleeping();
479 else if (mode == 5) Dead();
480 else if (mode == 6) BSOD();
481 else if (mode == 7) {
482 aRG.Update(MicrophoneFourierIT::GetFourierFiltered());
484 }
485 else if (mode == 8){
486 oSC.Update(MicrophoneFourierIT::GetSamples());
488 }
489 else {
490 sA.Update(MicrophoneFourierIT::GetFourierFiltered());
492 }
493 }
494
496
497 eEA.Update();
498 pM.Update();
499
500 //phaseR.SetRatio(eEA.GetValue(XenraxFace::Surprised));
501 //glitchX.SetRatio(eEA.GetValue(XenraxFace::Surprised));
502
503 rainbowNoise.Update(ratio);
504 rainbowSpiral.Update(ratio);
507
508 uint8_t faceSize = Menu::GetFaceSize();
509 float scale = Menu::ShowMenu() * 0.6f + 0.4f;
510 float faceSizeOffset = faceSize * 8.0f;
511
513 objA.SetEdgeMargin(4.0f);
514 objA.SetCameraMax(Vector2D(110.0f + faceSizeOffset, 115.0f - 115.0f * offsetFace).Multiply(scale));
515
516 objA.AlignObjects(scene.GetObjects(), 1);
517
518 pM.GetObject()->GetTransform()->SetPosition(Vector3D(xOffset, yOffset, 0.0f));
519 pM.GetObject()->UpdateTransform();
520 }
521};
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.
void Play()
Starts or resumes playback of the animation track.
void Pause()
Pauses playback of 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.
@ Sawtooth
Sawtooth waveform.
@ 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.
void SetRotationAngle(float rotationAngle)
Sets the rotation angle for the gradient.
void GradientShift(float ratio)
Shifts the gradient by a ratio.
Implements a horizontal blur effect for pixel groups.
A class for managing the Adafruit MMC56x3 magnetometer sensor.
Definition MMC56X3.h:29
Implements a magnetic distortion effect for pixel groups.
Definition Magnet.h:25
void SetPosition(Vector2D offset)
Sets the central position of the magnetic effect.
Definition Magnet.cpp:5
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.
@ Stretch
Attempt to scale the object(s) to fill the entire area.
Definition ObjectAlign.h:43
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.
A debugging effect used to identify memory issues in pixel rendering.
Definition Test.h:25
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
float X
The X-component of the 3D vector.
Definition Vector3D.h:28
float Y
The Y-component of the 3D vector.
Definition Vector3D.h:29
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.
FunctionGenerator fGenMatHue
SimpleMaterial greenMaterial
FunctionGenerator fGenMatYMove
FunctionGenerator fGenBattery
SpectrumAnalyzer sA
MaterialAnimator< 5 > backgroundMaterial
Oscilloscope oSC
SimpleMaterial pinkMaterial
FunctionGenerator fGenMove
SimpleMaterial redMaterial
PhaseOffsetR phaseR
RainbowSpiral rainbowSpiral
SimpleMaterial blueMaterial
FunctionGenerator fGenMatRMenu
PhaseOffsetX phaseX
void AudioReactiveGradientFace()
GradientMaterial< 3 > audioGrad
SimpleMaterial yellowMaterial
VerticalBlur blurV
BlinkTrack< 1 > blink
void ChangeInterpolationMethods()
RGBColor batterySpectrum[2]
GradientMaterial< 2 > gradientMat
FunctionGenerator fGenMatPos
FunctionGenerator fGenScale
Background background
GradientMaterial< 2 > batteryGrad
FunctionGenerator fGenRotation
EasyEaseAnimator< 30 > eEA
SimpleMaterial orangeMaterial
FunctionGenerator fGenMatXMenu
LEDStripBackgroundWS35 ledStripBackground
PhaseOffsetY phaseY
void FadeIn(float stepRatio) override
RGBColor audioSpectrum[3]
void FadeOut(float stepRatio) override
RainbowNoise rainbowNoise
FunctionGenerator fGenMatYMenu
FunctionGenerator fGenMatXMove
SimpleMaterial purpleMaterial
void Update(float ratio) override
static const uint8_t faceCount
FFTVoiceDetection< 128 > voiceDetection
FunctionGenerator fGenBlur
RGBColor gradientSpectrum[2]
MaterialAnimator< 15 > materialAnimator
HorizontalBlur blurH
uint8_t GetBrightness()
uint8_t GetAccentBrightness()
Object3D * GetObject()
SimpleMaterial whiteMaterial
AudioReactiveGradient aRG