1
0
Fork 0
trans.fail_xenotopic.network/pde/jitakami/drawFlylines.pde

120 lines
4.2 KiB
Plaintext
Raw Normal View History

2023-05-02 19:27:54 +02:00
/*
This file is part of "Interface Fractures III - Silicon".
Copyright (c) 2015 Luka Prinčič, All rights reserved.
This program is free software distributed under
GNU General Public Licence. See COPYING for more info.
- - - - - - - - - - - - - - - - - - - - - - - - - - - -
drawCurvesfly.pde
*/
void drawFlylines( boolean render, // should we render or not?
int curvesNum,
int pixBank, int pixId,
float speed, float direction, float sensitivity,
float brightDirection,
float rotation, float brightRotation,
int curveHue, int curveSatur, int curveBright,
int curveAlpha, float curveBrightAlpha,
int lineLength, float brightLength, int strokeWeight,
int pixHue, int pixSatur, int pixBright, int pixAlpha
)
{
if (render) {
colorMode(HSB, 127, 127, 127, 127);
blendMode(BLEND); // reset blend mode just in case
textureMode(IMAGE);
// curvesNum = int(map(float(curvesNum), 0, 127, 0, 7000));
speed = speed * 0.002;
brightDirection = map(brightDirection, 0, 127, -5, 5);
brightRotation = map(brightRotation, 0, 127, 0, 7);
curveBrightAlpha = map(curveBrightAlpha, 0, 127, 0, 1);
pixBank = min(pixBank, imgPool.length - 1);
pixId = min(pixId, imgPool[pixBank].length - 1);
// main loop!
for (int i = 0; i < curvesNum; i++) { // for each curve
// is this the time of creation?
if (curveX[i] == 0.0) {
if (curveY[i] == 0.0) {
curveX[i] = random(width);
curveY[i] = random(height);
}
}
color curveC = imgPool[pixBank][pixId] // load only full-size HD images!
.get(int(curveX[i]), int(curveY[i])); // get color of the pixel
float curvePixBrightness = pow(brightness(curveC), 1.8) / 127.0;
// maximum: pow(127, 1.8) / 127 = 48.19954
// if sensitivity is 0 then speedPixBrightness is a constant 48.2 / 2
// speed * (curvePixBrightness * sensitivity) + ((1-sensitivity) * 25))
float curvDirection = radians(map(direction, 0, 127, 0, 360) + (curvePixBrightness * brightDirection));
float cosdir = cos(curvDirection);
float sindir = sin(curvDirection);
float speedPixBrightness = speed * ((curvePixBrightness * sensitivity) + ((1-sensitivity) * 25));
float lineLengthBri = pow(lineLength * 0.1, 2) * ( (curvePixBrightness * brightLength ) + ((1 - brightLength)*1 ) );
//println(curvePixBrightness);
curveX[i] = curveX[i] + speedPixBrightness * cosdir;
curveY[i] = curveY[i] + speedPixBrightness * sindir;
if (curveX[i] > width-1) { // if off-sceen on X-axis
curveX[i] = 1; // wrap back
curveY[i] = random(height-1); } // randomize Y-axis position
else if (curveX[i] < 1) {
curveX[i] = width-1;
curveY[i] = random(height-1); // randomize Y-axis position
}
if (curveY[i] > height-1) { // if off-sceen on X-axis
curveY[i] = 1; // wrap back
curveX[i] = random(width-1); } // randomize Y-axis position
else if (curveY[i] < 0-1) {
curveY[i] = height-1;
curveX[i] = random(width-1); // randomize Y-axis position
}
float curveRotation = radians(map(rotation, 0, 127, 0, 180) + (brightRotation * curvePixBrightness) );
// float curveBrightAlphaFact = (brightness(curveC) / 127.0) * curveBrightAlpha;
float curveAlphaDest = curveAlpha * (((brightness(curveC) / 127.0)
* curveBrightAlpha)
+ (1 - curveBrightAlpha));
pushMatrix();
stroke(color(curveHue, curveSatur, curveBright, curveAlphaDest));
strokeWeight(strokeWeight);
translate(curveX[i], curveY[i]);
rotate(curveRotation);
line (0, lineLengthBri, 0, -lineLengthBri);
popMatrix();
}
noStroke();
beginShape();
texture(imgPool[pixBank][pixId]);
tint(pixHue, pixSatur, pixBright, pixAlpha);
vertex(0, 0, 0, 0);
vertex(width, 0, width, 0);
vertex(width, height, width, height);
vertex(0, height, 0, height);
endShape();
}
}