Different Points Of View
It must be an accidental coding example.
It's the creative coding work or generative art made with the 'Processing'.
When I played around with this code, I found that 'blendMode(SCREEN)' and 'pointLight(0, 0, 100, 0, 0, 0)' makes some interesting effect.
I didn't expect it but it came out!
Yes, I used the 'Accidental coding method'. ;-)
'Processing' code examples.
Please feel free to use this example codes.
To see other works based on my code is my pleasure. And my honor.
Simple version
I don't know why I wrote such a complex code in 2017...
/**
* Different Points Of View.
*
* @author @deconbatch
* @version 0.3
* @license GPL Version 3 http://www.gnu.org/licenses/
* Processing 3.5.3
* remake : 2021.05.29
*/
void setup() {
size(980, 600, P3D);
colorMode(HSB, 360.0, 100.0, 100.0, 100.0);
smooth();
noLoop();
int frmMax = 3;
int bCnt = floor(random(10.0, 50.0));
float bLen = max(width, height) * 2.0;
float baseHue = random(360.0);
camera(0, 0, bLen * 0.5,
0, 0, 0,
0, 1, 0);
noLights();
pointLight(0, 0, 100, 0, 0, bLen);
for (int frmCnt = 0; frmCnt < frmMax; frmCnt++) {
float bSat = random(40.0, 80.0);
baseHue += 120.0;
blendMode(BLEND);
background(0.0, 0.0, 0.0, 100.0);
blendMode(SCREEN);
for (int i = 0; i < bCnt; i++) {
pushMatrix();
fill((baseHue + random(180.0)) % 360.0, bSat, 50, 100);
rotateX(random(-1.0, 1.0) * HALF_PI);
rotateY(random(-1.0, 1.0) * HALF_PI);
rotateZ(random(-1.0, 1.0) * HALF_PI);
box(bLen, bLen, bLen);
popMatrix();
}
saveFrame("frames/" + String.format("%04d", frmCnt + 1) + ".png");
}
exit();
}
/*
Copyright (C) 2021- deconbatch
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>
*/
Accidental coding version
// Different Points Of View 2 : Accidental coding version // Processing 3.2.1 // 2017.08.20 import java.util.Random; Utils ut; BoxinBox bb; /* ---------------------------------------------------------------------- */ abstract class FountainElement { PShape anElement; float elementColor, elementSaturation, elementBright, elementAlpha; FountainElement() { anElement = pscreateElement(); elementColor = 0; elementSaturation = 0; elementBright = 0; elementAlpha = 0; } abstract PShape pscreateElement(); void setElementFill(float pcolor, float psaturation, float pbright, float palpha) { elementColor = pcolor; elementSaturation = psaturation; elementBright = pbright; elementAlpha = palpha; resetColor(); } void resetColor() { anElement.setFill(color(elementColor, elementSaturation, elementBright, elementAlpha)); } void changeColor(float scolor) { elementColor = scolor; resetColor(); } void changeBright(float sbright) { elementBright = sbright; resetColor(); } void resetSize() { anElement.resetMatrix(); } void changeSize(float scaleX, float scaleY, float scaleZ) { anElement.scale(scaleX, scaleY, scaleZ); } void rotate(float radX, float radY, float radZ) { anElement.rotateX(radX); anElement.rotateY(radY); anElement.rotateZ(radZ); } void show() { shape(anElement); } } /* ---------------------------------------------------------------------- */ class BoxinBox extends FountainElement { BoxinBox() { super(); } PShape pscreateElement() { noStroke(); PShape psDp = createShape(GROUP); PShape psCh; for (int i = 50; i > 45; --i) { float len = pow(i, 2); float rad = radians(i * ut.gaussdist(20, 6, 3)); psCh = createShape(BOX, len, len, len); psCh.setFill(color(random(0, 360), 60, 80, 100)); psCh.rotateX(rad); psCh.rotateY(rad * ut.gaussdist(1.5, 1.0, 0.5)); psCh.rotateZ(rad * ut.gaussdist(2.0, 1.0, 0.5)); psDp.addChild(psCh); } return psDp; } void setBgcolor() { background(random(0, 360), 100, 5); } void bigBox() { fill(random(0, 360), 100, 20, 100); rotateY(radians(random(-30,30))); rotateZ(radians(random(-60,60))); rotateX(radians(random(-60,60))); box(2000,2000,1); } } /* ---------------------------------------------------------------------- */ class Utils { Random obj_random; Utils() { obj_random = new Random(); } float gaussdist(float pmean, float plimit, float pdevi) { /** Gaussian distribution 1.parameters. pmean : mean value plimit : max value of abs(deviation) ex. plimit >= 0 pmean = 0.5, plimit = 0.5 -> return value = from 0.0 to 1.0 pdevi : standard deviation value ex. good value? -> pdevi = plimit / 2 2.return. gaussian distribution **/ if (plimit == 0) { return pmean; } float gauss = (float) obj_random.nextGaussian() * pdevi; // not good idea if (abs(gauss) > plimit) { gauss = pow(plimit, 2) / gauss; } return pmean + gauss; } } /* ---------------------------------------------------------------------- */ void setup() { size(800, 490, P3D); colorMode(HSB, 360, 100, 100, 100); smooth(); background(0, 0, 0); blendMode(SCREEN); ut = new Utils(); } void draw() { translate(0, 0, 0); camera(0, 0, 1200, 0, 0, 0, 0, 1, 0); lightFalloff(0.5, 0.0008, 0.0); pointLight(0, 0, 100, 0, 0, 0); bb = new BoxinBox(); bb.setBgcolor(); pushMatrix(); translate(0, 0, -1500); bb.bigBox(); popMatrix(); pushMatrix(); translate(0, 0, 0); bb.show(); popMatrix(); // saveFrame("frames/####.png"); // exit(); } /* Copyright (C) 2017 deconbatch This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <http://www.gnu.org/licenses/> */
Video version
Creative coding works made with Processing and Kdenlive.It's just a meaningless row of boxes.
Thanks to nice music
Turandot on Ice in Space by Steve Combs
2017/03/25
http://freemusicarchive.org/music/Steve_Combs/Etaoin_Shrdlu/04_Turandot_on_Ice_in_Space
Turandot on Ice in Space by Steve Combs is licensed under a Attribution License.
For more permissions:
contact artist
// Different Points Of View // Processing 3.2.1 // 2017.05.06 import java.util.Random; Utils ut; BoxinBox bb; /* ---------------------------------------------------------------------- */ abstract class FountainElement { PShape anElement; float elementColor, elementSaturation, elementBright, elementAlpha; FountainElement() { anElement = pscreateElement(); elementColor = 0; elementSaturation = 0; elementBright = 0; elementAlpha = 0; } abstract PShape pscreateElement(); void setElementFill(float pcolor, float psaturation, float pbright, float palpha) { elementColor = pcolor; elementSaturation = psaturation; elementBright = pbright; elementAlpha = palpha; resetColor(); } void resetColor() { anElement.setFill(color(elementColor, elementSaturation, elementBright, elementAlpha)); } void changeColor(float scolor) { elementColor = scolor; resetColor(); } void changeBright(float sbright) { elementBright = sbright; resetColor(); } void resetSize() { anElement.resetMatrix(); } void changeSize(float scaleX, float scaleY, float scaleZ) { anElement.scale(scaleX, scaleY, scaleZ); } void rotate(float radX, float radY, float radZ) { anElement.rotateX(radX); anElement.rotateY(radY); anElement.rotateZ(radZ); } void show() { shape(anElement); } } /* ---------------------------------------------------------------------- */ class BoxinBox extends FountainElement { float bgcolor; BoxinBox() { super(); bgcolor = 0; } PShape pscreateElement() { noStroke(); PShape psDp = createShape(GROUP); PShape psCh; for (int i = 3; i < 12; ++i) { float len = pow(i, 3); float rad = radians(i * ut.gaussdist(20, 10, 5)); psCh = createShape(BOX, len, len, len); psCh.setFill(color(random(0, 360), 50, 90, 100)); psCh.rotateX(rad); psCh.rotateY(rad*1.5); psCh.rotateZ(rad*2.0); psDp.addChild(psCh); } return psDp; } void setBgcolor() { bgcolor = random(0, 360); } float getBgcolor() { return bgcolor; } } /* ---------------------------------------------------------------------- */ class Utils { Random obj_random; Utils() { obj_random = new Random(); } float gaussdist(float pmean, float plimit, float pdevi) { /** Gaussian distribution 1.parameters. pmean : mean value plimit : max value of abs(deviation) ex. plimit >= 0 pmean = 0.5, plimit = 0.5 -> return value = from 0.0 to 1.0 pdevi : standard deviation value ex. good value? -> pdevi = plimit / 2 2.return. gaussian distribution **/ if (plimit == 0) { return pmean; } float gauss = (float) obj_random.nextGaussian() * pdevi; // not good idea if (abs(gauss) > plimit) { gauss = pow(plimit, 2) / gauss; } return pmean + gauss; } } /* ---------------------------------------------------------------------- */ void setup() { size(1280, 720, P3D); colorMode(HSB, 360, 100, 100, 100); smooth(); background(0, 0, 0); frameRate(1); blendMode(LIGHTEST); ut = new Utils(); } void draw() { translate(0, 0, 0); camera(0, 0, 800, 0, 0, 0, 0, 1, 0); pointLight(0, 0, 100, 0, 0, 0); if (frameCount % 4 == 1) { bb = new BoxinBox(); bb.setBgcolor(); } background(bb.getBgcolor(), 100, 10); pushMatrix(); translate(0, 0, 0); bb.show(); popMatrix(); /* saveFrame("frames/####.png"); if (frameCount >= 3000) { exit(); } */ } /* Copyright (C) 2016 deconbatch This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <http://www.gnu.org/licenses/> */