Andor Salga

Demo for Textures

This page demonstrates Pjs textures

// Demo by Andor Salga
import processing.opengl.*;
/* @pjs preload= 
"PT_anim0000.gif",
"PT_anim0001.gif", 
"PT_anim0002.gif",
"PT_anim0003.gif",
"PT_anim0004.gif",
"PT_anim0005.gif",
"PT_anim0006.gif",
"PT_anim0007.gif",
"PT_anim0008.gif",
"PT_anim0009.gif",
"PT_anim00010.gif",
"PT_anim00011.gif"
*/

float r = 0.0;
float r2 = 0.0;
float col = 0;

int deltaTime = 0;
int lastTime = 0;

ArrayList gifs;
int nextGif = 0;

void setup() 
{
  size(640, 360, OPENGL);
  textureMode(NORMALIZED);
  sphereDetail(8);

  gifs = new ArrayList();

  for(int i = 0; i < 12; i++){
    String s = "PT_anim000" + i + ".gif";
    PImage pim = loadImage(s);
    gifs.push(pim);
  }
}

void drawBox(){
  deltaTime +=  millis() - lastTime;

 if( deltaTime > 50){
    deltaTime = 0;
    nextGif++; 
    lastTime = millis();
  }

  if(nextGif >= 12){
    nextGif = 0;
  }

  beginShape(QUADS);

  texture(gifs[nextGif]);

  stroke(0);

  // -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);

  // +Z "front" 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 "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 drawSphere(int i){

  float col = abs(sin(frameCount/10)) * 120;

  noLights();
  if( i == -1)
    directionalLight(255-col, 255-col, 255-col, 0, 0, -1);
  else
    directionalLight(col, col, col, 0, 0, -1);

  fill(255);
  noStroke();

  pushMatrix();
    rotateX(r2*i);
    rotateY(r*i);
    translate(30*i, 0, 0);
    sphere(3);
  popMatrix();
}

void draw() 
{
  background(200);

  r  += 0.1;
  r2 += 0.01;

  translate(width/2.0, height/2.0, 240);

  drawSphere(-1);
  drawSphere(1);
  
  rotateX(r2);
  rotateZ(-r2);
  scale(15);
  drawBox();
}