Concept
As we talked about chaos and order in class, I felt inspired to incorporate these themes in my next art piece. I was also inspired by the rotating hypercubes we looked at in class and wanted to add cubes to my art. Combining these elements, I came up with a streak of cubes exuding from a sphere. An array of cube objects are created and they are translated along the canvas. My love for randomness really influenced this project as this streak of cubes randomly moved around with the sphere while each individual cube rotated as well. Also, the cubes and the sphere are assigned random colors. These rotations and the translations, have a certain order to them, but when the mouse is pressed, the canvas becomes more chaotic! The translations are random within a range of values allowing for a very random and pretty streak of cubes that rotate and rapidly change positions on the screen. There is also a random shooting star that appears and floats on the screen when the mouse is pressed. Also, pressing the mouse also changes the stroke colors and shape colors to shades of grey further enhancing a chaotic effect – it gives a warping effect such as that when space or time is warped by a black hole.
Art and Code
Here is the artwork:
Here is my code:
//define some global variables gnumOfCubes=80; gboxWidth = 10; gboxHeight = 10; gboxDepth= 10; tx=20; //translation along x axis ty=10; //translation along y axis //to draw a bunch of cubes let gCubeArray =[]; function setup() { createCanvas(400, 400, WEBGL); background(20); } function rotateElement() { rotateX(frameCount * 0.01); rotateY(frameCount * 0.01); } function draw() { //refresh background so that previously drawn cubes disappear background(20); //for rotation of the elements rotateElement(); //when mouse pressed if (mouseIsPressed) { // a star appears and randomly moves across the screen star = new shootingStar(mouseX,mouseY,50,50,4,7); star.update(); star.display(); //also, color and stroke should become shades of grey when mouse pressed fill(random(255)); stroke(random(255)); } else { //if not pressed, keep all colors and stroke is black stroke(0); fill(random(255),random(255),random(255)); } //draw a sphere in the center sphere(30); //draw cubes that exude out of the center of the canvas and from a streak by repeatedly translating them drawCubes(gCubeArray,-tx,-ty); //if mouse is pressed, choose random values for translation along x and y to create a chaotic effect and then draw cubes if (mouseIsPressed) { tx=random(-10,10); ty=random(-10,10); drawCubes(gCubeArray,-tx,-ty); } //draw a circle to accompany the tip of the streak of cubes fill('white'); ellipse(0,0,50,50); } //class for cubes class Cube{ constructor(width, height, depth, size){ this.width = width; this.height = height; this.depth = depth; this.size = size; } display(){ rotateElement(); if (mouseIsPressed) { fill(random(255)); } else { fill(random(255),random(255),random(255)); } //use box from WEBGL mode to create the cubes box(this.width, this.height, this.depth, this.size); } } //a shooting star that appears when mouse is pressed and randomly moves around class shootingStar{ constructor(x,y, width,height, xSpeed, ySpeed){ this.x=x; this.y=y; this.width=width; this.height =height; this.xSpeed=xSpeed; this.ySpeed=ySpeed; } display(){ fill('white'); ellipse(this.x, this.y, this.width,this.height); } //update position of the store to create motion update(){ this.x += this.xSpeed; this.y += this.ySpeed; } } //function to draw the streak of cubes by pushing cubes onto the cube array and translating them function drawCubes(gCubeArray,tx,ty) { for (let i=0; i < gnumOfCubes; i++){ gCubeArray.push( new Cube(gboxWidth,gboxHeight,gboxDepth,4) ) gCubeArray[i].display(); translate(tx,ty); } }
I used functions, arrays, and object-oriented programming to create this artwork.
Reflection and future improvements
I immensely enjoyed making this art piece. While I had the purpose of creating cubes and having them rotate, I experimented with the transformations and the WebGL mode to finally come up with this work. It was after a lot of experimentation that this work was created and this is the most exciting part of this course – forming a new, different creative piece that you might not have envisioned in the beginning.
In the future, I want to use more classes and functions to further enhance this piece or other works. For example, an entire galaxy of stars could be created in the backdrop while I only created one so that can be added. Moreover, music can be added as well and I also want to experiment with sine and cosine functions in the future.