Processing: Making a cube

Las limitaciones que conlleva utilizar la función box() de Processing me han llevado a diseñar una pequeña función personalizada que dibuje en la pantalla un cubo a partir de las seis caras que lo componen. Se basa en dibujar a través de las funciones beginShape() y endShape(), incluyendo los diferentes vértices con vertex(), dibujar estas seis caras conociendo las posiciones en el espacio. Para dibujar esta función hace falta conocer cada esquina del cubo en el espacio, estando compuesto de seis caras ya cada cara de cuatro esquinas, era necesario saber cuales había escrito ya y cuales me faltaban. Para ello hice un pequeño dibujo en mi cuaderno:

NotesOfCustomBoxFunction.jpg

A través de este dibujo, comprobando cada esquina fui componiendo el siguiente código:

void boxShape(){
  beginShape();
    vertex(x,y,0);
    vertex(x+100,y,0);
    vertex(x+100,y+100,0); // 1
    vertex(x,y+100,0);
    vertex(x,y,0);
  endShape();

  beginShape();
    vertex(x,y,100);
    vertex(x+100,y,100);
    vertex(x+100,y+100,100); // 2
    vertex(x,y+100,100);
    vertex(x,y,100);
  endShape();

  beginShape();
    vertex(x,y,0);
    vertex(x+100,y,0);
    vertex(x+100,y,100); // 3
    vertex(x,y,100);
    vertex(x,y,0);
  endShape();

  beginShape();
    vertex(x,y,0);
    vertex(x,y+100,0);
    vertex(x,y+100,100); // 4
    vertex(x,y,100);
    vertex(x,y,0);
  endShape();

  beginShape();
    vertex(x+100,y+100,0);
    vertex(x,y+100,0);
    vertex(x,y+100,100);
    vertex(x+100,y+100,100); // 5
    vertex(x+100,y+100,0);
  endShape();

  beginShape();
    vertex(x+100,y+100,0);
    vertex(x+100,y+100,100); // 6
    vertex(x+100,y,100);
    vertex(x+100,y,0);
    vertex(x+100,y+100,0);
  endShape();
}

Dibujadas cada cara del cubo por separado, al final se obtiene el cubo, si acompañamos este código de las siguientes funciones draw() setup(), se obtiene un cubo rotando en el espacio:

int x = 0, y = 0;
float  t = 0;

void setup() {
  size(400, 400, P3D);
  background(20);
}

void draw() {
  background(20);
  ortho();
  camera(200, 200, 0, // EYE
    0, 0, 0, // CENTER
    0, 0, -1); // UP
  rotateY(t);
  rotateZ(t);
  fill(180, 10, 10);
  stroke(5);
  boxShape();
  t += 0.02;
}

Aquí pueden verse diferentes imágenes finales del cubo dibujado:

Esta función la he realizado para reemplazar a la función box() en este proyecto:

Generating Terrain v0.1

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión /  Cambiar )

Google photo

Estás comentando usando tu cuenta de Google. Cerrar sesión /  Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión /  Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión /  Cambiar )

Conectando a %s