← Back

ofxFade

github.com/ffunatsu/ofxFade · @ffunatsu
OF 0.12 Animation Graphics Utilities

Generic fade-in/out helper for openFrameworks

0 1 Last commit 1y ago Created 1y ago

README

ofxFade



docs/movie.gif

Generic fade-in/out helper for openFrameworks

This addon is "immediate-mode" style (like ImGui). Draw functions are executed immediately at the place where you wrote.

This addon basically provides three functions:

And two fader (timer) classes for instances, which has the same method above in it:

( You can also create new fader classes by extending ofxFade::Fader or two above. )

Table of Contents





Dependencies



Examples



example_simple



docs/screenshot_simple.png

#include "ofxFade.h"

// loop time: 2.5 (sec)
float t = std::fmodf(ofGetElapsedTimef(), 2.5f);

// fadein: 0.5, static: 1.0, fadeout: 0.5
ofxFade::alpha(t, 0.5f, 1.0f, 0.5f, [](float a){
    ofSetColor(255, 0, 0, a);
    ofDrawEllipse(100, 100, 100, 100);
});


Text and indicators (Advanced usage)

// fadein: 0.5, static: 1.0, fadeout: 0.5
ofxFade::advanced(t, 0.5f, 1.0f, 0.5f, [](float rateEasing, float rateTime, ofxFade::Phase phase){
    std::string s1 = "rateEasing: " + ofToString(rateEasing, 2);
    ofDrawBitmapString(s1, 200, 50);

    std::string s2 = "rateTime: " + ofToString(rateTime, 2);
    ofDrawBitmapString(s2, 200, 100);

    std::string s3 = ofxFade::phaseToString(phase);
    ofDrawBitmapStringHighlight(s3, 200, 150);
});


example_delta



docs/screenshot_delta.png

#include "ofxFade.h"

// loop time: 2.5 (sec)
float t = std::fmodf(ofGetElapsedTimef(), 2.5f);

// fadein: 0.5, static: 1.0, fadeout: 0.5, delta: 100
ofxFade::delta<float>(t, 0.5f, 1.0f, 0.5f, 100.0f, [](float delta){
    ofSetColor(255, 0, 0);
    ofDrawEllipse(100, 100 + delta, 100, 100);
});


and more:

// fadein: 0.5, static: 1.0, fadeout: 0.5, delta: 100
ofxFade::delta<float>(t, 0.5f, 1.0f, 0.5f, 100.0f, [](float delta, float alpha){
    ofSetColor(255, 0, 0, alpha);
    ofDrawEllipse(220, 100 + delta, 100, 100);
});

// fadein: 0.5, static: 1.0, fadeout: 0.5, delta: (30, 100)
ofxFade::delta<ofVec2f>(t, 0.5f, 1.0f, 0.5f, ofVec2f(30, 100), [](ofVec2f delta, float alpha){
    ofSetColor(255, 0, 0, alpha);
    ofDrawEllipse(340 + delta.x, 100 + delta.y, 100, 100);
});


example_easing



docs/screenshot_easing.png

#include "ofxFade.h"

// loop time: 2.5 (sec)
float t = std::fmodf(ofGetElapsedTimef(), 2.5f);

// fadein: 0.5, static: 1.0, fadeout: 0.5, delta: 100, cubic (out)
ofxFade::delta<float>(t, 0.5f, 1.0f, 0.5f, 100.0f, [](float delta){
    ofSetColor(255, 0, 0);
    ofDrawEllipse(100, 100 + delta, 100, 100);
}, ofxeasing::Function::Cubic);


and more:

// fadein: 0.5, static: 1.0, fadeout: 0.5, delta: 100, bounce in, linear out
ofxFade::delta<float>(t, 0.5f, 1.0f, 0.5f, 100.0f, [](float delta, float alpha){
    ofSetColor(255, 0, 0, alpha);
    ofDrawEllipse(220, 100 + delta, 100, 100);
}, ofxeasing::Function::Bounce, ofxeasing::Type::Out,
    ofxeasing::Function::Linear, ofxeasing::Type::In);

// fadein: 0.5, static: 1.0, fadeout: 0.5, cubic (in)
ofxFade::alpha(t, 0.5f, 1.0f, 0.5f, [](float alpha){
    ofSetColor(255, 0, 0, alpha);
    ofDrawEllipse(340, 100, 100, 100);
}, ofxeasing::Function::Cubic, ofxeasing::Type::In);

// fadein: 0.5, static: 1.0, fadeout: 0.5, cubic (out)
ofxFade::advanced(t, 0.5f, 1.0f, 0.5f, [](float r, float rt, ofxFade::Phase phase){
    const float x = 460;

    std::string s1 = "rateEasing: " + ofToString(r, 2);
    ofDrawBitmapString(s1, x, 50);

    std::string s2 = "rateTime: " + ofToString(rt, 2);
    ofDrawBitmapString(s2, x, 100);

    std::string s3 = ofxFade::phaseToString(phase);
    ofDrawBitmapStringHighlight(s3, x, 150);

}, ofxeasing::Function::Cubic);


example_interactive



docs/screenshot_interactive.png

#include "ofxFade.h"

ofxFade::InteractiveFader fader;

//--------------------------------------------------------------
void ofApp::setup(){
    // fadein = 1.0, fadeout = 1.0 (sec)
    fader = ofxFade::InteractiveFader(1.0f, 1.0f);
    fader.start();
}

//--------------------------------------------------------------
void ofApp::update(){

}

//--------------------------------------------------------------
void ofApp::draw(){
    fader.alpha([](float a){
        ofSetColor(255, 0, 0, a);
        ofDrawEllipse(100, 100, 100, 100);
    });

    ofDrawBitmapString("click to toggle fade", 100, 100);
}

//--------------------------------------------------------------
void ofApp::mousePressed(int x, int y, int button){
    if(fader.isStarted() && !fader.isFadeOutStarted()){
        fader.fadeOut();
    }else if(fader.isFinished()){
        fader.start();
    }
}


example_non_interactive



docs/screenshot_non_interactive.png

#include "ofxFade.h"

ofxFade::NonInteractiveFader fader;

//--------------------------------------------------------------
void ofApp::setup(){
    // fadein = 1.0, static = 1.0, fadeout = 0.5 (sec)
    fader = ofxFade::NonInteractiveFader(1.0f, 1.0f, 0.5f);
    fader.start();
}

//--------------------------------------------------------------
void ofApp::update(){

}

//--------------------------------------------------------------
void ofApp::draw(){
    fader.delta<float>(100, [](float delta, float alpha){
        ofSetColor(255, 0, 0, alpha);
        ofDrawEllipse(220, 100 + delta, 100, 100);
    }, ofxeasing::Function::Bounce, ofxeasing::Type::Out,
        ofxeasing::Function::Linear, ofxeasing::Type::In);

    // if(fader.isFinished()){
        ofDrawBitmapString("click to restart", 400, 100);
    // }
}

//--------------------------------------------------------------
void ofApp::mousePressed(int x, int y, int button){
    // if(fader.isFinished()){
        fader.start();
    // }
}


Notes



No fadeout



fadeout_sec is optional (ofxfade::optional [^1].)
So please set fadeout_sec to ofxfade::nullopt [^1] means no fadeout.

No fadein



Just set 0 to fadein_sec

How to get rateEasing/rateTime/phase in alpha(), delta()



Custom delta class



You can pass any custom class T for delta<T>(), if it can be multiplied () by rate (please implement operator (float).)

Other options



  ofxFade::withFlag(ofxFade::OFXFADE_NO_PUSH_POP, [&](){
      // something you want...
  });
  


TODOs



License



Dual licensed under WTFPL and/or 0BSD.

[^1]: If C++17 or later, ofxfade::optional is the same as std::optional .

Get this addon

HTTPS
SSH