// Demo written by Andor Salga import processing.opengl.*; /* @pjs preload="crate1.jpg,crate2.jpg,crate3.jpg"; */ PImage crate, crate2, crate3; void setup() { size(400, 400, OPENGL); crate = loadImage("crate1.jpg"); crate2 = loadImage("crate2.jpg"); crate3 = loadImage("crate3.jpg"); textureMode(NORMALIZED); } float yRot = 0; float xRot = 0; float zRot = 0; float frames = 0; float s = 1; float r = 0; void drawBox(PImage i){ beginShape(QUADS); texture(i); // -Z "back" face vertex( 1, -1, -1, 0, 0); vertex(-1, -1, -1, 1, 0); vertex(-1, 1, -1, 1, 1); vertex( 1, 1, -1, 0, 1); vertex(-1, -1, 1, 0, 0); vertex( 1, -1, 1, 1, 0); vertex( 1, 1, 1, 1, 1); vertex(-1, 1, 1, 0, 1); // +Y "bottom" face vertex(-1, 1, 1, 0, 0); vertex( 1, 1, 1, 1, 0); vertex( 1, 1, -1, 1, 1); vertex(-1, 1, -1, 0, 1); // -Y "top" face vertex(-1, -1, -1, 0, 0); vertex( 1, -1, -1, 1, 0); vertex( 1, -1, 1, 1, 1); vertex(-1, -1, 1, 0, 1); // +X "right" face vertex( 1, -1, 1, 0, 0); vertex( 1, -1, -1, 1, 0); vertex( 1, 1, -1, 1, 1); vertex( 1, 1, 1, 0, 1); // -X "left" face vertex(-1, -1, -1, 0, 0); vertex(-1, -1, 1, 1, 0); vertex(-1, 1, 1, 1, 1); vertex(-1, 1, -1, 0, 1); endShape(); } void draw() { frames++; background(0); pushMatrix(); translate(width/2-80, height/2, 150); translate(0, sin((100+frames)/30)* 40, 0); rotateY(yRot+=0.03); rotateX(xRot+=0.035); rotateZ(zRot+=0.065); scale(20); drawBox(crate); popMatrix(); pushMatrix(); translate(width/2, height/2, 150); translate(0, sin(frames/30)* 40, 0); rotateY(yRot + PI); rotateX(xRot); rotateZ(zRot); scale(20); drawBox(crate2); popMatrix(); pushMatrix(); translate(width/2+80, height/2, 150); translate(0, sin(250+frames/30)* 40, 0); rotateY(-yRot); rotateX(-xRot); rotateZ(zRot); scale(20); drawBox(crate3); popMatrix(); }