3d no Processing

// _01cubo

void setup() {

  size(400, 400, P3D);

}

void draw() {

  background(0);

  // Move para o centro da tela

  translate(200, 200, 0);

  // Rotaciona no eixo y usando

  // o valor de mouseX

  // map serve para reescalonar o mouseX

  // entre -PI e +PI

  rotateY(map(mouseX, 0, width, -PI, PI));

  box(200);

}

void setup() {

  size(400, 400, P3D);

}

void draw() {

  background(0);

  // Move para o centro da tela

  translate(200, 200, 0);

  // Rotaciona no eixo y usando

  // o valor de mouseX

  // map serve para reescalonar o mouseX

  // entre -PI e +PI

  rotateY(map(mouseX, 0, width, -PI, PI));

  box(200);

}

// 02esfera

void setup() {

  size(400, 400, P3D);

}

void draw() {

 background(0);

 translate(200, 200, 0);

 // Rotaciona no eixo X a partir do mouse Y.

 rotateX(map(mouseY, 0, width, -PI, PI));

 sphere(100);

 // Determina o detalhamento da esfera a partir de mouseX

 sphereDetail(mouseX);

}

void setup() {

  size(400, 400, P3D);

}

void draw() {

 background(0);

 translate(200, 200, 0);

 // Rotaciona no eixo X a partir do mouse Y.

 rotateX(map(mouseY, 0, width, -PI, PI));

 sphere(100);

 // Determina o detalhamento da esfera a partir de mouseX

 sphereDetail(mouseX);

}

// _03luz_ambiente

size(100, 100, P3D);

background(0);

noStroke();

ambientLight(50, 255, 102);

translate(32, 50, 0);

rotateY(PI/5);

box(40);

translate(60, 0, 0);

sphere(30);

size(100, 100, P3D);

background(0);

noStroke();

// Liga a luz ambiente verde

ambientLight(50, 255, 102);

translate(32, 50, 0);

rotateY(PI/5);

box(40);

translate(60, 0, 0);

sphere(30);

Não vem de uma direção específica

O objeto é iluminado igualmente em todos os lados

// _04_luz_direcional

void setup() {

  size(400, 400, P3D);

  noStroke();

}

void draw() {

  background(0);

  ambientLight(128, 128, 128);

  // 0, 255, 0 - verde

  // -1, 0, 0 - luz vem da direita para a esquerda

  directionalLight(0,255,0, -1, 0,0);

  translate(width/2, height/2, 0);

  rotateY(map(mouseX, 0, width, 0, 2*PI));

  rotateX(map(mouseY, 0, height, 0, 2*PI));

  box(100);

}

void setup() {

  size(400, 400, P3D);

  noStroke();

}

void draw() {

  background(0);

  ambientLight(128, 128, 128);

  // 0, 255, 0 - verde

  // -1, 0, 0 - luz vem da direita para a esquerda

  directionalLight(0,255,0, -1, 0,0);

  translate(width/2, height/2, 0);

  rotateY(map(mouseX, 0, width, 0, 2*PI));

  rotateX(map(mouseY, 0, height, 0, 2*PI));

  box(100);

}

Luz que vem de uma direção

Sem localização específica

Luz paralela

Mais forte nas áreas quadradas

Mais fraco nas angulações

O sol

// 05luz_puntual

void setup() {

  size(400,400,P3D);

  noStroke();

}

void draw() {

 

  background(0);

  ambientLight(128,128,128);

  pointLight(255,0,0,mouseX, mouseY, 0);

  directionalLight(0,255,0,-1,0,0);

  translate(100,height/2);

  sphere(70);

  translate(200,0);

  sphere(70);

}

void setup() {

  size(400,400,P3D);

  noStroke();

}

void draw() {

 

  background(0);

  ambientLight(128,128,128);

  // luz vermelha, controlada pela posição do mouse

  pointLight(255,0,0,mouseX, mouseY, 0);

  directionalLight(0,255,0,-1,0,0);

  translate(100,height/2,0);

  sphere(70);

  translate(200,0);

  sphere(70);

}

Proveniente de um ponto

Com localização específica

Espalha a partir do ponto

concentration

// _06luz_spot

void setup() {

  size(400,400,P3D);

  noStroke();

}

void draw() {

  background(0);

  ambientLight(128,128,128);

  // Cria uma luz spot vermelha,

  // partindo de um ponto dependente do mouse,

  // na direção 0, 0, -1

  // com um certo ângulo e concentração

  spotLight(255,0,0,mouseX, mouseY, 300, 0,0,-1, PI/12, 2);

  //pointLight(255,0,0,mouseX, mouseY, 300);

  directionalLight(0,255,0,-1,0,0);

  translate(width/2,height/2);

  sphereDetail(50);

  sphere(100);

}

void setup() {

  size(400,400,P3D);

  noStroke();

}

void draw() {

  background(0);

  ambientLight(128,128,128);

  // Cria uma luz spot vermelha,

  // partindo de um ponto dependente do mouse,

  // na direção 0, 0, -1

  // com um certo ângulo e concentração

  spotLight(255,0,0,mouseX, mouseY, 300, 0,0,-1, PI/12, 2);

  //pointLight(255,0,0,mouseX, mouseY, 300);

  directionalLight(0,255,0,-1,0,0);

  translate(width/2,height/2);

  sphereDetail(50);

  sphere(100);

}

Proveniente de um ponto

Com localização específica

Gera um cone de luz a partir do ponto

Texturas estão associadas a vértices

Vértices são consumidos em figuras de diferentes tipos

Coordenadas de mapeamento de textura podem ser normalizadas

// _07textura
// Usando imagem de: http://tinyurl.com/fotoeu
size(100, 100, P3D);
noStroke();
PImage a = loadImage("eu.jpg");
textureMode(NORMALIZED);
beginShape();
texture(a);
vertex(10, 20, 0, 0);
vertex(80, 5, 1, 0);
vertex(95, 90, 1, 1);
vertex(40, 95, 0, 1);
endShape();

// _08textura2

PImage textura;

void setup () {

  size(300,300,P3D);

  textura = loadImage("eu.jpg");

}

void draw() {

  background(0);

  translate(width/2,height/2);

  rotateX(map(mouseY,0,height,0, 2*PI));

  rotateY(map(mouseX,0,height,0, 2*PI));

  textureMode(NORMALIZED);

  beginShape(QUADS);

  texture(textura);

  vertex(0,0,0,0,0);

  vertex(100,0,0,1,0);

  vertex(100,100,0,1,1);

  vertex(0,100,0,0,1);

  endShape();

  beginShape(QUADS);

  texture(textura);

  vertex(0,0,0,0,0);

  vertex(100,0,0,1,0);

  vertex(100,0,100,1,1);

  vertex(0,0,100,0, 1);

  endShape();

 

}

import saito.objtools.*;

import saito.objloader.*;

m.drawMode(POLYGON);

m.draw();

// _09carregamento_modelo

// Modelo lamp.obj extraido de: http://people.sc.fsu.edu/~burkardt/data/obj/obj.html

import processing.opengl.*;

import saito.objtools.*;

import saito.objloader.*;

OBJModel m;

void setup() {

  size(300,300,OPENGL);

  m = new OBJModel(this,"lamp.obj");

  smooth();

}

void draw() {

  background(255);

  lights();

  noStroke();

  translate(width/2,height/2);

  rotateY(map(mouseX,0,width,0,2*PI));

  rotateX(map(mouseY,0,height,0,2*PI));

  scale(15);

  m.drawMode(POLYGON);

  m.draw();

}

// _09carregamento_modelo

// Modelo lamp.obj extraido de: http://people.sc.fsu.edu/~burkardt/data/obj/obj.html

import processing.opengl.*;

import saito.objtools.*;

import saito.objloader.*;

OBJModel m;

void setup() {

  size(300,300,OPENGL);

  m = new OBJModel(this,"lamp.obj");

  smooth();

}

void draw() {

  background(255);

  lights();

  noStroke();

  translate(width/2,height/2);

  rotateY(map(mouseX,0,width,0,2*PI));

  rotateX(map(mouseY,0,height,0,2*PI));

  scale(15);

  m.drawMode(POLYGON);

  m.draw();

}