Week 8 -- Intro to 3D concepts
back to syllabus2D system inside 3D space
Here's an example that pulls together our discussion of visualizing 2D arrays from last week with this week's exploration of 3D transformations. Like in the game of life, each cell is a rectangle. However, each cell moves and rotates using translate and rotateY. Note the use of push() and pop() to draw each element with rotation around its center point. Push() and pop() are also used to translate each column along the z axis.
//size of each rect
int cellsize = 16;
//number of columns and rows in our system
int COLS, ROWS;
//global angle variable
float angle = 0.0f;
void setup()
{
size(400, 400);
//initialize rows
COLS = width/cellsize;
ROWS = height/cellsize;
colorMode(RGB,255,255,255,100);
rectMode(CENTER_DIAMETER);
background(0);
}
void loop()
{
background(0);
fill(100,100,100,50);
stroke(200);
//increment angle for sine calculation
angle += 0.1f;
//begin loop for columns
for ( int i = 0; i < COLS;i++) {
//save transformation matrix
push();
//calculate a z transformation based on sine
float z = sin(i/5.0f+angle)*40.0f;
translate(0,0,z);
//begin loop for rows
for ( int j = 0; j < ROWS;j++) {
//save transformation matrix
push();
//calculate x and y location and translate
int x = i*cellsize + cellsize/2;
int y = j*cellsize + cellsize/2;
translate(x,y,0);
//determine distance from mouse and rotate based on that
float dist = sqrt(sq(mouseX-x) + sq(mouseY-y)) / 50.0f;
rotateY(dist);
//draw rect
rect(0,0,cellsize-3,cellsize-3);
//restore transformation matrix
pop();
}
//restore transformation matrix
pop();
}
}
back to syllabus