Hello,
I’m trying to convert a sketch made in Processing.js to standard Processing so I can port it as a canvass, using screen broadcast, onto surfaces in Unity.
I’ve made all the obvious changes like var to int etc., but i’m struggling to convert a function preload section of the code, getting an “unexpected token: {” error on line 29 of my code.
I have tried to research a solution but while there are lots of resources for converting Processing to Processing.js, there are relatively few the other way around because it’s uncommon practise.
Could you please give me a steer on this conversion?
Or perhaps i’m barking up the wrong tree and there is an easier way to achieve what i’m aiming for?
Any help would be appreciated - thank you!
Here is the original Processing.js code:
//Main sketch
'use strict';
// image is whatever I found online. I didn't make it.
let segments = [];
let numSegments = 60;
let segmentResolution = 400;
let segmentLength;
let segmentSpacing;
let heightScale = 150;
let fadeIn = 0;
let speed = 0.51;
let mp = false;
let mouseIsDown = false;
let loaded = false;
let img;
let tt = 0;
let glitchFreq = 0.5;
let now, lastTime = 0;
function preload() {
loadImage('img.jpg', function(_img) {
img = _img;
img.loadPixels();
loaded = true;
segmentSpacing = (img.height / numSegments);
segmentLength = img.width;
for (let i = 0; i < numSegments; i++) {
segments.push(new Segment({
pos: { x: 0, y: i },
len: segmentLength
}));
}
});
};
function setup() {
createCanvas(windowWidth, windowHeight);
};
function update(dt) {
segments.forEach(
s => {
s.update(dt)
}
);
}
function mousePressed(){
mouseIsDown = true;
glitchFreq = 0.3;
}
function mouseReleased(){
mouseIsDown = false;
glitchFreq = 0.5;
}
function draw() {
if (!loaded) return;
let dt = (millis() - lastTime) / 1000;
lastTime = millis();
tt += dt;
update(dt);
fill(0, 250);
noStroke();
rect(0,0, windowWidth, windowHeight);
let gridHeight = numSegments * segmentSpacing;
push();
heightScale = 60 + (sin(millis()/1000) / TAU) * 50;
translate(windowWidth / 2 - img.width, windowHeight / 2 - img.height / 2 - 100);
scale(2, 2);
if(mouseIsDown){
tint(55,0,0);
image(img, 0, 0);
}
else{
tint(255);
}
let trans = false;
let ss = 0;
segments.forEach(s => {
ss++;
// let n = noise(millis()/200 + s.dist/500);
let n = 0;
if (ss > 30) {
n = noise(millis() / 200);
// ss / numSegments
}
/*if (n > glitchFreq && trans === false) {
push();
translate(40, 0);
trans = true;
}*/
s.draw();
});
if (trans) {
pop();
}
pop();
}
//Tab 2
let id = 0;
class Segment {
constructor(cfg) {
Object.assign(this, cfg);
this.t = 0;
this.dist = 0;
this.id = id++;
this.nextNoise = 0;
// [x,y, x,y, ...]
// add 2 for a point starting at the very start of the viewport and one of the end.
this.vertices = new Float32Array(segmentResolution * 2 + 2);
this.update(0);
}
update(dt) {
this.t += dt * 1;
fadeIn += dt * .008;
fadeIn = constrain(fadeIn, 0, 1);
let xSpacing = this.len / segmentResolution;
this.pos.y -= dt * speed;
this.dist += dt * speed;
//if (this.pos.y > img.height / segmentSpacing) {
// this.pos.y -= img.height / segmentSpacing;
//}
if (this.pos.y < 0) {
this.pos.y += img.height / segmentSpacing;
}
for (let i = 0; i < this.vertices.length; i += 2) {
let x = (i / 2) * xSpacing;
let y = this.pos.y * segmentSpacing;
if (mp) {
let d = dist(x, y, (mouseX - windowWidth / 2 + windowWidth / 4 + 50) / 2, (mouseY - windowHeight / 2 + windowHeight / 4 + 250) / 2);
if (d < 40) {
let a = (8 / d) * 8;
y += (a > 50) ? 50 : a;
}
}
let col = img.get(x, y);
let intensity = col[0] / 255;
this.vertices[i + 0] = x;
this.vertices[i + 1] = y - (intensity) * heightScale;
}
}
draw() {
strokeWeight(1);
let waves = (sin(this.pos.y / 2.0 + this.t ) / PI) + 0.5;
let vignette = sin(this.pos.y * segmentSpacing / img.height * PI);
stroke(255, 255 * fadeIn * waves * vignette + 50 * vignette);
// fill(0);
noFill();
beginShape();
for (let i = 0; i < this.vertices.length; i += 2) {
if (i === 0) {
vertex(-1000, this.vertices[i + 1]);
} else if (i + 2 === this.vertices.length) {
vertex(10000, this.vertices[i + 1]);
} else {
vertex(this.vertices[i + 0], this.vertices[i + 1]);
if (this.id < numSegments - 1) {
let s = segments[id + 1];
vertex(this.vertices[i + 0], this.vertices[i + 1]);
}
}
}
endShape();
// beginShape(LINES);
// if(this.id < numSegments-1){
// let nextSeg = segments[this.id+1];
// for (let i = 0; i < this.vertices.length; i += 2) {
// vertex(this.vertices[i + 0], this.vertices[i + 1]);
// vertex(nextSeg.vertices[i + 0], nextSeg.vertices[i + 1]);
// }
// }
// endShape();
// stroke(45,255);
// push();
// translate(7, 7);
// beginShape();
// for (let i = 0; i < this.vertices.length; i += 2) {
// vertex(this.vertices[i + 0], this.vertices[i + 1]);
// }
// endShape();
// pop();
}
}
And this is my conversion to Processing so far:
//Main sketch
int[] segments;
int numSegments = 60;
int segmentResolution = 400;
int segmentLength;
int segmentSpacing;
int heightScale = 150;
int fadeIn = 0;
float speed = 0.51;
boolean mp = false;
boolean mouseIsDown = false;
boolean loaded = false;
int img;
int tt = 0;
float glitchFreq = 0.5;
int now, lastTime = 0;
void setup() {
size (500, 500);
};
function preload() {
loadImage("img.jpg", function(_img) {
img = _img;
img.loadPixels();
loaded = true;
segmentSpacing = (img.height / numSegments);
segmentLength = img.width;
for (let i = 0; i < numSegments; i++) {
segments.push(new Segment({
pos: { x: 0, y: i },
len: segmentLength
}));
}
});
};
void update(dt) {
segments.forEach(
s => {
s.update(dt)
}
);
}
void mousePressed(){
mouseIsDown = true;
glitchFreq = 0.3;
}
void mouseReleased(){
mouseIsDown = false;
glitchFreq = 0.5;
}
void draw() {
if (!loaded) return;
int dt = (millis() - lastTime) / 1000;
lastTime = millis();
tt += dt;
void update(dt);
fill(0, 250);
noStroke();
rect(0,0, width, height);
int gridHeight = numSegments * segmentSpacing;
push();
heightScale = 60 + (sin(millis()/1000) / TAU) * 50;
translate(width / 2 - img.width, height / 2 - img.height / 2 - 100);
scale(2, 2);
if(mouseIsDown){
tint(55,0,0);
image(img, 0, 0);
}
else{
tint(255);
}
boolean trans = false;
int ss = 0;
segments.forEach(s => {
ss++;
// let n = noise(millis()/200 + s.dist/500);
int n = 0;
if (ss > 30) {
n = noise(millis() / 200);
// ss / numSegments
}
/*if (n > glitchFreq && trans === false) {
push();
translate(40, 0);
trans = true;
}*/
s.draw();
});
if (trans) {
pop();
}
pop();
}
//Tab 2:
int id = 0;
class Segment {
constructor(cfg) {
Object.assign(this, cfg);
this.t = 0;
this.dist = 0;
this.id = id++;
this.nextNoise = 0;
// [x,y, x,y, ...]
// add 2 for a point starting at the very start of the viewport and one of the end.
this.vertices = new Float32Array(segmentResolution * 2 + 2);
this.update(0);
}
void update(dt) {
this.t += dt * 1;
fadeIn += dt * .008;
fadeIn = constrain(fadeIn, 0, 1);
int xSpacing = this.len / segmentResolution;
this.pos.y -= dt * speed;
this.dist += dt * speed;
//if (this.pos.y > img.height / segmentSpacing) {
// this.pos.y -= img.height / segmentSpacing;
//}
if (this.pos.y < 0) {
this.pos.y += img.height / segmentSpacing;
}
for (int i = 0; i < this.vertices.length; i += 2) {
int x = (i / 2) * xSpacing;
int y = this.pos.y * segmentSpacing;
if (mp) {
let d = dist(x, y, (mouseX - width / 2 + width / 4 + 50) / 2, (mouseY - height / 2 + windowHeight / 4 + 250) / 2);
if (d < 40) {
int a = (8 / d) * 8;
y += (a > 50) ? 50 : a;
}
}
int col = img.get(x, y);
int intensity = col[0] / 255;
this.vertices[i + 0] = x;
this.vertices[i + 1] = y - (intensity) * heightScale;
}
}
void draw() {
strokeWeight(1);
float waves = (sin(this.pos.y / 2.0 + this.t ) / PI) + 0.5;
int vignette = sin(this.pos.y * segmentSpacing / img.height * PI);
stroke(255, 255 * fadeIn * waves * vignette + 50 * vignette);
// fill(0);
noFill();
beginShape();
for (let i = 0; i < this.vertices.length; i += 2) {
if (i === 0) {
vertex(-1000, this.vertices[i + 1]);
} else if (i + 2 === this.vertices.length) {
vertex(10000, this.vertices[i + 1]);
} else {
vertex(this.vertices[i + 0], this.vertices[i + 1]);
if (this.id < numSegments - 1) {
int s = segments[id + 1];
vertex(this.vertices[i + 0], this.vertices[i + 1]);
}
}
}
endShape();
// beginShape(LINES);
// if(this.id < numSegments-1){
// let nextSeg = segments[this.id+1];
// for (let i = 0; i < this.vertices.length; i += 2) {
// vertex(this.vertices[i + 0], this.vertices[i + 1]);
// vertex(nextSeg.vertices[i + 0], nextSeg.vertices[i + 1]);
// }
// }
// endShape();
// stroke(45,255);
// push();
// translate(7, 7);
// beginShape();
// for (let i = 0; i < this.vertices.length; i += 2) {
// vertex(this.vertices[i + 0], this.vertices[i + 1]);
// }
// endShape();
// pop();
}
}