I’m doing a simple slideshow that mixes (with random alphas) three instances of a image-based class. The class shows a random image from a folder and then starts doing a fade-in until reaches the alpha value of the object. Once it reaches this point goes again down. When the alphai reaches 0 it calls another image and start the process again.
This works with only one instance of the class ( set by #define NIMAGES 1). If I want three or more images (appearing and disappearing with fades at different times) the script just won’t do this well. When an object changes the file somehow it triggers the same operation in the other layers (before fading out completely) provoking strange jumps and sudden appearances. The other thing is that I’m centering the image but just now is printing them in the 0,0 corner.
I’m really clueless about this. Thanks A LOT for any help.
The code:
main.cpp
#include "ofMain.h"
#include "ofApp.h"
//========================================================================
int main( ){
// ofGLFWWindowSettings settings;
// settings.multiMonitorFullScreen = true;
// settings.windowMode = OF_FULLSCREEN;
// ofCreateWindow(settings);
//ofSetupOpenGL(7560,1920,OF_WINDOW); // <-------- setup the GL context
ofSetupOpenGL(2048,1152,OF_WINDOW);
//ofSetupOpenGL(2520,640,OF_WINDOW);
// this kicks off the running of my app
// can be OF_WINDOW or OF_FULLSCREEN
// pass in width and height too:
ofRunApp(new ofApp());
}
ofApp.cpp
#include "ofApp.h"
//--------------------------------------------------------------
void ofApp::setup(){
vector<string> files;
string path = "";
ofDirectory dir(path);
//only show png files
dir.allowExt("jpg");
//populate the directory object
dir.listDir();
//add all paths to files vector
for(int i = 0; i < dir.size(); i++){
files.push_back(dir.getPath(i));
ofLogNotice(dir.getPath(i));
// ofLogNotice(files[i]);
}
ofRandomize(files);
ofLogNotice("**********");
//go through and print out all the vectors
for(int i = 0; i < files.size(); i++){
// ofLogNotice(files[i]);
}
for(int i=0; i<NIMAGES; i++){
imageLayers[i].setup();
}
}
//--------------------------------------------------------------
void ofApp::update(){
for(int i=0; i<NIMAGES; i++){
imageLayers[i].update();
}
}
//--------------------------------------------------------------
void ofApp::draw(){
for(int i=0; i<NIMAGES; i++){
imageLayers[i].draw();
}
}
//--------------------------------------------------------------
void ofApp::keyPressed(int key){
for(int i=0; i<NIMAGES; i++){
imageLayers[i].setup();
}
}
//--------------------------------------------------------------
void ofApp::keyReleased(int key){
}
//--------------------------------------------------------------
void ofApp::mouseMoved(int x, int y ){
}
//--------------------------------------------------------------
void ofApp::mouseDragged(int x, int y, int button){
}
//--------------------------------------------------------------
void ofApp::mousePressed(int x, int y, int button){
}
//--------------------------------------------------------------
void ofApp::mouseReleased(int x, int y, int button){
}
//--------------------------------------------------------------
void ofApp::mouseEntered(int x, int y){
}
//--------------------------------------------------------------
void ofApp::mouseExited(int x, int y){
}
//--------------------------------------------------------------
void ofApp::windowResized(int w, int h){
}
//--------------------------------------------------------------
void ofApp::gotMessage(ofMessage msg){
}
//--------------------------------------------------------------
void ofApp::dragEvent(ofDragInfo dragInfo){
}
ofApp.h
#pragma once
#include "ofMain.h"
#include "Wimage.h"
#define NIMAGES 1
class ofApp : public ofBaseApp{
public:
void setup();
void update();
void draw();
void keyPressed(int key);
void keyReleased(int key);
void mouseMoved(int x, int y );
void mouseDragged(int x, int y, int button);
void mousePressed(int x, int y, int button);
void mouseReleased(int x, int y, int button);
void mouseEntered(int x, int y);
void mouseExited(int x, int y);
void windowResized(int w, int h);
void dragEvent(ofDragInfo dragInfo);
void gotMessage(ofMessage msg);
float x=0;
Wimage wImage;
Wimage imageLayers[NIMAGES];
};
Wimage.cpp
#include "Wimage.h"
Wimage::Wimage(){
}
void Wimage::setup(){
int wWidth = ofGetWidth(); // get window size
int wHeight = ofGetHeight();
newImage();
x= wWidth/2-pic.getWidth()/2;
y= wHeight/2-pic.getHeight()/2;
w = pic.getWidth();
alpha = ofRandom(50, 200); // alpha
alphai = 0;
}
void Wimage::update(){
if (fadeout==0) {
alphai=alphai+1;
if (alphai>alpha) {
alphai=alpha; fadeout=1;
}
} else { alphai=alphai-1;
if (alphai<0) {
alphai=0; fadeout=0; newImage();
}
}
}
void Wimage::draw(){
pic.draw(x,y);
ofSetColor(255,255,255,alphai);
}
void Wimage::newImage() {
string path = "";
ofDirectory dir(path);
dir.allowExt("jpg");
dir.listDir();
alphai=0;
pic.load(dir.getPath(ofRandom(dir.size())));
}
Wimage.h
#ifndef Wimage_hpp
#define Wimage_hpp
#include <stdio.h>
#include "ofMain.h" // we need to include this to have a reference to the openFrameworks framework
class Wimage {
public: // place public functions or variables declarations here
// methods, equivalent to specific functions of your class objects
void setup(); // setup method, use this to setup your object's initial state
void update(); // update method, used to refresh your objects properties
void draw(); // draw method, this where you'll do the object's drawing
void newImage(); // new image for layer
ofImage pic; // image
// variables
float x; // position
float y;
float w; // width
float h; // height
float ratio; // aspect ratio
float alpha; // starting alpha value
float alphai; // alpha variable for fade in-outs
int fadeout=0; // flag for fade
ofColor color; // color using ofColor type
Wimage(); // constructor - used to initialize an object, if no properties are passed the program sets them to the default value
private: // place private functions or variables declarations here
};
#endif /* wImage_hpp */