-
Notifications
You must be signed in to change notification settings - Fork 4
/
Teapot.pde
75 lines (66 loc) · 1.93 KB
/
Teapot.pde
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
import peasy.*;
import patchy.*;
Patchy teapot = PatchGroup.teapot();
PeasyCam cam;
BoundingVolume bounds;
PImage chex, paper;
int selectedFill = 1;
void setup() {
size(600, 600, P3D);
teapot.setGridSteps(15);
bounds = teapot.scale((double)width / teapot.getBounds().boundingSphereRadius());
cam = new PeasyCam(this,
bounds.x.center(), bounds.y.center(), bounds.z.center(),
bounds.boundingSphereRadius());
chex = loadImage("checker_green.jpg");
paper = loadImage("smallpaper.jpg");
try {
textFont(new PFont(createInput("TheSans-Plain-12.vlw")), 12);
} catch (IOException e) {
e.printStackTrace();
}
}
void draw() {
translate(bounds.x.center(), bounds.y.center(), bounds.z.center());
rotateX(PI / 3);
translate(-bounds.x.center(), -bounds.y.center(), -bounds.z.center());
background(0);
lights();
pointLight(100, 100, 255, 100, -100, 200);
pointLight(255, 100, 100, 100, 100, 200);
pointLight(100, 255, 100, -100, 100, 200);
pointLight(255, 255, 255, -100, 100, -200);
noStroke();
fill(160, 160, 160);
if (selectedFill == 1) {
teapot.draw(this, chex);
} else if (selectedFill == 2) {
teapot.draw(this, paper);
} else {
if (selectedFill == 4) {
noFill();
stroke(0, 255, 0);
}
teapot.draw(this);
}
instructions();
}
private void instructions() {
cam.beginHUD();
fill(selectedFill == 1 ? color(0, 255, 0) : 255);
text("a - Checkerboard", 10, 15);
fill(selectedFill == 2 ? color(0, 255, 0) : 255);
text("b - Wallpaper", 10, 30);
fill(selectedFill == 3 ? color(0, 255, 0) : 255);
text("c - Solid color", 10, 45);
fill(selectedFill == 4 ? color(0, 255, 0) : 255);
text("d - Wireframe", 10, 60);
fill(255);
text("Drag to look around. Right-drag to zoom. Double-click to restore.", 10, height - 8);
cam.endHUD();
}
public void keyPressed() {
if (key >= 'a' && key <= 'd') {
selectedFill = 1 + key - 'a';
}
}