feat(of): images dans toutes demos + sphere 3D

User : "pour les effects d'image etc tu mets à jour toutes les
démos. puis la wave tu la fait vraiment en sphère 3D".

SphereWaveVis enrichi :
- 3 sphères concentriques au lieu d'une seule :
  * solide centrale modulée par FFT (bins par lon)
  * coque externe wireframe scaled 1.4x rotation inversée bass
  * coque interne wireframe scaled 0.6x pulsée par kick
- 2 sphères pôles haut/bas (treble) pour repère 3D
- Camera orbitale plus dramatique (rayon - kick, hauteur treble,
  vitesse modulée bpm)
- Render solid + wireframes superposés
- Couleurs vert / bleu / magenta selon couche

Toutes les démos ont maintenant au moins 1 acte avec image OS :
  AMIGA       → ImgWB ✓
  C64         → ImgC64 ✓
  ACID        → ImgAtari (NEW)
  TUNNEL      → ImgNeXT (NEW)
  FREQUENCIES → ImgLotus + SphereWave (NEW)
  GLITCH      → ImgOS2 (NEW)
  AMBIENT     → ImgApple (NEW)
  RAVE        → ImgWin95 (NEW)
  MEMORY      → ImgNeXT + ImgBeOS ✓
  GREETINGS   → 7 logos parade ✓
  ESCHER      → ImgWin1 (NEW)
  INFERNO     → ImgDos ✓
  OUTRUN      → ImgWin311 (NEW)
  CUBE STORM  → ImgZX + ImgIrix (NEW)
This commit is contained in:
L'électron rare
2026-05-07 23:05:14 +02:00
parent 574acfbba4
commit 21b5e5bb32
2 changed files with 80 additions and 17 deletions
+43 -8
View File
@@ -674,7 +674,11 @@ void ofApp::initDemos() {
{"ROSACE", 20.0f, polSpe(), SS::Wavy3D,
" K=5 PETALS POLAR ROSE EACH PETAL A KICK ", "H",
BgKind::Rose3d},
{"COMEDOWN", 25.0f, starsWave(), SS::Mirror,
{"ATARI", 18.0f, polSpe(), SS::Rainbow,
" *** ATARI 2600 *** PRINT FROM 1977 "
" THE FIRST PIXEL TRIPS WERE HERE ", "A",
BgKind::ImgAtari},
{"COMEDOWN", 22.0f, starsWave(), SS::Mirror,
" AND SOFTLY BACK TO EARTH "
" THE 303 SLEEPS IN ITS CIRCUIT ", "J", BgKind::Caustics},
}};
@@ -694,7 +698,10 @@ void ofApp::initDemos() {
" A NEVER ENDING TORUS "
" GREETINGS TO ANDROMEDA AND CONSPIRACY ", "E",
BgKind::TorusMesh},
{"OPENING", 30.0f, all(), SS::Rainbow,
{"NEXT CUBE",30.0f, polSpe(), SS::Chrome,
" THE NEXT CUBE APPEARS OBJC SMALLTALK 1989 "
" THE OS THAT BIRTHED OS X ", "F", BgKind::ImgNeXT},
{"OPENING", 25.0f, all(), SS::Rainbow,
" THE TUNNEL OPENS UP EVERYTHING APPEARS "
" PURE LIGHT BEYOND THE WALLS ", "F", BgKind::Tunnel},
}};
@@ -718,7 +725,14 @@ void ofApp::initDemos() {
{"HOPF", 25.0f, polSpe(), SS::Wavy3D,
" HOPF FIBRATION SPHERES INSIDE SPHERES "
" HARMONIC DECOMPOSITION VISUAL ", "B", BgKind::Hopf},
{"FULL", 25.0f, all(), SS::Rainbow,
{"LOTUS", 22.0f, polSpe(), SS::Cascade,
" LOTUS 1-2-3 THE FIRST KILLER APP "
" SPREADSHEET MEETS SPECTRUM ", "Q", BgKind::ImgLotus},
{"SPHERE", 25.0f, polSpe(), SS::Wavy3D,
" THE SPECTRUM AS A SPHERE "
" EACH LONGITUDE A FREQUENCY EACH LATITUDE A TIME ", "Q",
BgKind::SphereWave},
{"FULL", 22.0f, all(), SS::Rainbow,
" EVERY BAND ALIVE NOW THE SPECTRUM IS COMPLETE "
" FROM SUBSONIC TO ULTRASONIC ", "Q", BgKind::Voronoi},
}};
@@ -742,6 +756,9 @@ void ofApp::initDemos() {
{"CRASH", 20.0f, all(), SS::Glitch,
" KERNEL PANIC BUT THE BEAT GOES ON ", "Q",
BgKind::PlasmaC64},
{"OS/2 WARP", 20.0f, polSpe(), SS::Glitch,
" OS/2 WARP THE BLUE SCREEN OF DESPAIR "
" BUT THE WARP CONTINUES ", "Q", BgKind::ImgOS2},
{"REBOOT", 18.0f, polSpe(), SS::Cascade,
" SYSTEM REINITIALIZING NEW REALITY LOADING ", "Q",
BgKind::Vortex},
@@ -764,7 +781,10 @@ void ofApp::initDemos() {
{"ENNEPER", 25.0f, polSpe(), SS::Mirror,
" A MINIMAL SURFACE LEAST AREA POSSIBLE "
" GREETINGS TO ASD AND CONSPIRACY ", "S", BgKind::Enneper},
{"RETURN", 25.0f, starsWave(), SS::Mirror,
{"APPLE", 18.0f, polSpe(), SS::Mirror,
" THE APPLE RAINBOW 1977 - 1998 "
" SIX BANDS OF GENTLE NOSTALGIA ", "J", BgKind::ImgApple},
{"RETURN", 22.0f, starsWave(), SS::Mirror,
" AND BACK TO THE STARS REMEMBER THIS QUIET "
" YOU WERE HERE YOU LISTENED ", "J", BgKind::Starfield},
}};
@@ -789,7 +809,10 @@ void ofApp::initDemos() {
" BURN THIS PLACE DOWN 180 BPM ETERNAL FLAME "
" GREETINGS TO HARDCODE TITAN ANARCHY ", "T",
BgKind::Fire},
{"AFTER", 25.0f, polSpe(), SS::Mirror,
{"WIN95", 18.0f, all(), SS::Glitch,
" WINDOWS 95 START.WAV BRIAN ENO 6 SECONDS "
" PLUG AND PRAY ", "Q", BgKind::ImgWin95},
{"AFTER", 20.0f, polSpe(), SS::Mirror,
" THE BEAT IS GONE THE WALLS STILL SHAKE "
" YOUR HEART STILL THINKS IT IS RAVING ", "Q",
BgKind::PlasmaFbm},
@@ -910,7 +933,10 @@ void ofApp::initDemos() {
" THE FRACTAL HAS NO END "
" GREETINGS TO INIGO QUILEZ AND KNIGHTY ", "L",
BgKind::Kifs},
{"COLLAPSE", 20.0f, polSpe(), SS::Mirror,
{"WIN 1.0", 18.0f, polSpe(), SS::Bouncy,
" WINDOWS 1.0 1985 LEAKED PIXELS BLOCK BY BLOCK "
" GEOMETRY BEFORE GUI ", "O", BgKind::ImgWin1},
{"COLLAPSE", 18.0f, polSpe(), SS::Mirror,
" AND THE FUNCTION RESETS BACK TO X = 0 Y = 0 ", "J",
BgKind::Starfield},
}};
@@ -960,7 +986,10 @@ void ofApp::initDemos() {
{"VAPOR ROAD", 25.0f, all(), SS::Mirror,
" THE ROAD BECOMES MEMORY "
" GHOSTS OF FUTURES PAST ", "R", BgKind::PlasmaFbm},
{"HORIZON", 20.0f, starsWave(), SS::Mirror,
{"WIN 3.11", 18.0f, all(), SS::Glitch,
" WINDOWS 3.11 NT THE PRE-START-MENU AGE "
" PROGRAM MANAGER RULES ", "R", BgKind::ImgWin311},
{"HORIZON", 18.0f, starsWave(), SS::Mirror,
" AND THE ENGINE FADES INTO THE NIGHT "
" UNTIL TOMORROW WE RIDE AGAIN ", "U",
BgKind::Starfield},
@@ -985,7 +1014,13 @@ void ofApp::initDemos() {
{"CASCADE", 25.0f, all(), SS::Wavy3D,
" EUCLIDEAN SPACE COLLAPSES THE CUBES SCATTER ", "Q",
BgKind::TunnelCubes},
{"ZERO", 20.0f, polSpe(), SS::Mirror,
{"ZX", 20.0f, polSpe(), SS::Rainbow,
" SINCLAIR ZX SPECTRUM 7 ATTRIBUTES OF GLORY "
" UK SCENE FOREVER ", "Q", BgKind::ImgZX},
{"IRIX", 20.0f, polSpe(), SS::Chrome,
" SGI IRIX WORKSTATION 9 SQUARES OF POWER "
" JURASSIC PARK MAGIC ", "V", BgKind::ImgIrix},
{"ZERO", 18.0f, polSpe(), SS::Mirror,
" BACK TO ORIGIN DIMENSION COLLAPSED ", "J",
BgKind::Starfield},
}};
+37 -9
View File
@@ -97,11 +97,12 @@ void SphereWaveVis::draw(int x, int y, int w, int h) {
ofEnableDepthTest();
ofEnableLighting();
// Camera orbite
const float orbitR = 7.0f;
const float orbitA = t_ * 0.25f;
// Camera orbite plus dramatique : varie le rayon avec kick, hauteur
// suit treble, angle accéléré par bpm.
const float orbitR = 7.0f - kick_ * 2.0f;
const float orbitA = t_ * (0.35f + bpm_ * 0.0008f);
camera_.setPosition(std::cos(orbitA) * orbitR,
std::sin(t_ * 0.18f) * 2.0f,
std::sin(t_ * 0.27f) * (2.0f + treble_ * 2.0f),
std::sin(orbitA) * orbitR);
camera_.lookAt(ofVec3f(0, 0, 0));
light_.setPosition(std::sin(t_ * 0.7f) * 5.0f,
@@ -110,7 +111,7 @@ void SphereWaveVis::draw(int x, int y, int w, int h) {
light_.enable();
camera_.begin(ofRectangle(0, 0, w, h));
// Couleur cycle hue + audio
// Sphère solide centrale — couleur cycle hue + audio
ofColor col;
col.setHsb(static_cast<int>(std::fmod(t_ * 25.0f, 255.0f)),
180,
@@ -118,17 +119,44 @@ void SphereWaveVis::draw(int x, int y, int w, int h) {
material_.setDiffuseColor(col);
material_.setSpecularColor(ofFloatColor(1.0f, 0.9f, 0.8f));
material_.setShininess(48.0f);
// Solid pass
ofSetColor(col);
material_.begin();
sphere_.drawFaces();
material_.end();
// Wireframe par-dessus
ofSetColor(255, 240, 200, 140);
// Wireframe par-dessus (intérieur)
ofSetColor(255, 240, 200, 180);
sphere_.drawWireframe();
// Sphère wireframe EXTÉRIEURE concentrique — scaled 1.4x avec rotation
// inversée pour un effet de coque tournante
ofPushMatrix();
ofRotateRad(-t_ * 0.4f, 0, 1, 0);
ofRotateRad(t_ * 0.25f, 1, 0, 0);
ofScale(1.4f + bass_ * 0.2f);
ofSetColor(120, 220, 255, 80);
sphere_.drawWireframe();
ofPopMatrix();
// Sphère wireframe INTÉRIEURE — scaled 0.6x pulsée par kick
ofPushMatrix();
ofRotateRad(t_ * 0.6f, 0, 1, 0);
ofRotateRad(-t_ * 0.4f, 1, 0, 0);
ofScale(0.6f + kick_ * 0.3f);
ofSetColor(255, 100, 200, 200);
sphere_.drawWireframe();
ofPopMatrix();
// Pôles : 2 sphères wireframe small en haut/bas pour repère
for (float py : {-3.5f, 3.5f}) {
ofPushMatrix();
ofTranslate(0, py, 0);
ofScale(0.3f + treble_ * 0.2f);
ofSetColor(255, 220, 100, 140);
sphere_.drawWireframe();
ofPopMatrix();
}
camera_.end();
light_.disable();
ofDisableLighting();