mirror of
https://github.com/processing/processing4.git
synced 2026-02-03 05:39:18 +01:00
60 lines
1.3 KiB
Plaintext
Executable File
60 lines
1.3 KiB
Plaintext
Executable File
/**
|
|
* Brick Tower
|
|
* by Ira Greenberg.
|
|
*
|
|
* 3D castle tower constructed out of individual bricks.
|
|
* Uses the PVector and Cube classes.
|
|
*/
|
|
|
|
float bricksPerLayer = 16.0;
|
|
float brickLayers = 18.0;
|
|
Cube brick;
|
|
float brickWidth = 60, brickHeight = 25, brickDepth = 25;
|
|
float radius = 175.0;
|
|
float angle = 0;
|
|
|
|
void setup(){
|
|
size(640, 360, P3D);
|
|
brick = new Cube(brickWidth, brickHeight, brickDepth);
|
|
}
|
|
|
|
void draw(){
|
|
background(0);
|
|
float tempX = 0, tempY = 0, tempZ = 0;
|
|
fill(182, 62, 29);
|
|
noStroke();
|
|
// Add basic light setup
|
|
lights();
|
|
translate(width/2, height*1.2, -380);
|
|
// Tip tower to see inside
|
|
rotateX(radians(-45));
|
|
// Slowly rotate tower
|
|
rotateY(frameCount * PI/600);
|
|
for (int i = 0; i < brickLayers; i++){
|
|
// Increment rows
|
|
tempY-=brickHeight;
|
|
// Alternate brick seams
|
|
angle = 360.0 / bricksPerLayer * i/2;
|
|
for (int j = 0; j < bricksPerLayer; j++){
|
|
tempZ = cos(radians(angle))*radius;
|
|
tempX = sin(radians(angle))*radius;
|
|
pushMatrix();
|
|
translate(tempX, tempY, tempZ);
|
|
rotateY(radians(angle));
|
|
// Add crenelation
|
|
if (i==brickLayers-1){
|
|
if (j%2 == 0){
|
|
brick.create();
|
|
}
|
|
}
|
|
// Create main tower
|
|
else {
|
|
brick.create();
|
|
}
|
|
popMatrix();
|
|
angle += 360.0/bricksPerLayer;
|
|
}
|
|
}
|
|
}
|
|
|