Sketch 2015-06-19
void ofApp::setupAnim() {
timeline.setOutPointAtFrame(48);
timeline.addCurves("layer-1-alpha", ofRange(0, 255));
timeline.addCurves("layer-2-alpha", ofRange(0, 255));
timeline.addCurves("layer-3-alpha", ofRange(0, 255));
timeline.addCurves("layer-1-scale", ofRange(1, 4));
timeline.addCurves("layer-2-scale", ofRange(1, 4));
timeline.addCurves("layer-3-scale", ofRange(1, 4));
timeline.addCurves("layer-1-x", ofRange(0, 1));
timeline.addCurves("layer-1-y", ofRange(0, 1));
timeline.addCurves("layer-2-x", ofRange(0, 1));
timeline.addCurves("layer-2-y", ofRange(0, 1));
timeline.addCurves("layer-3-x", ofRange(0, 1));
timeline.addCurves("layer-3-y", ofRange(0, 1));
timeline.togglePlay();
leafVertical.setup("leaf-vertical.png", width, height, 2, TEXTURE_OFFSET_BOTTOM_RIGHT);
leafDiagonal.setup("leaf-diagonal.png", width, height, 2, TEXTURE_OFFSET_BOTTOM_RIGHT);
leafStar.setup("leaf-star.png", width, height, 2, TEXTURE_OFFSET_MIDDLE_CENTER);
planes.push_back(&leafVertical);
planes.push_back(&leafDiagonal);
planes.push_back(&leafStar);
masker.setup(width, height);
masker.newLayer();
masker.newLayer();
masker.newLayer();
}
void ofApp::updateAnim(){
for(int i = 0; i < planes.size(); i++) {
ID = ofToString(i+1);
alpha = timeline.getValue("layer-" + ID + "-alpha");
scale = timeline.getValue("layer-" + ID + "-scale");
position.x = timeline.getValue("layer-" + ID + "-x");
position.y = timeline.getValue("layer-" + ID + "-y");
masker.beginLayer(i);
{
ofSetColor(ofColor::white);
planes.at(i)->setTextureScale(scale);
planes.at(i)->setTexturePosition(position.x, position.y);
planes.at(i)->draw();
}
masker.endLayer(i);
masker.beginMask(i);
{
ofBackground(ofColor::black);
ofSetColor(ofColor::white, alpha);
ofRect(0, 0, width, height);
}
masker.endMask(i);
}
}
void ofApp::drawAnim() {
ofBackground(ofColor::black);
ofSetColor(ofColor::white);
masker.draw();
if(ofGetFrameNum() == 48) {
renderGif();
}
}
Sometimes it doesn't look like much has changed. But the movements in this sketch are based on a series of improvements to ofxTexturePlane, and the integration of ofxTimeline - opening up new possibilities going forward.