1
2
3
4
5
6
7 #include "shape.h"
8
9 #include <iostream.h>
10 #include <GL/glut.h>
11
12
13
14
15
16 static inline double min(double a, double b) {
17 return((a < b) ? a : b);
18 }
19
20 static inline double max(double a, double b) {
21 return((a > b) ? a : b);
22 }
23
24
25
26 static inline Vector normal(const Vector& p0, const Vector& p1, const Vector& p2) {
27
28 return((p1 - p0) * (p0 - p2));
29 }
30
31
32
33
34
35 Triangle::Triangle(const Vector& p0, const Vector& p1, const Vector& p2) {
36 points_[0] = p0;
37 points_[1] = p1;
38 points_[2] = p2;
39 }
40
41 void Triangle::render() {
42 glBegin(GL_TRIANGLES);
43 glNormal3dv(normal(points_[0], points_[1], points_[2]).rep());
44 glVertex3dv(points_[0].rep());
45 glVertex3dv(points_[1].rep());
46 glVertex3dv(points_[2].rep());
47 glEnd();
48 }
49
50
51
52
53
54 Box::Box(const Vector& llf, const Vector& urb) {
55 lowerLeftFront_ = Vector(min(llf[0], urb[0]),
56 min(llf[1], urb[1]),
57 min(llf[2], urb[2]));
58
59 upperRightBack_ = Vector(max(llf[0], urb[0]),
60 max(llf[1], urb[1]),
61 max(llf[2], urb[2]));
62 }
63
64 void Box::render() {
65
66 #define l lowerLeftFront_
67 #define r upperRightBack_
68
69
70 Triangle oben1(Vector(l[0], r[1], l[2]),
71 Vector(r[0], r[1], l[2]),
72 Vector(r[0], r[1], r[2]));
73 Triangle oben2(Vector(l[0], r[1], l[2]),
74 Vector(r[0], r[1], r[2]),
75 Vector(l[0], r[1], r[2]));
76 oben1.render();
77 oben2.render();
78
79
80 Triangle unten1(Vector(l[0], l[1], l[2]),
81 Vector(r[0], l[1], l[2]),
82 Vector(r[0], l[1], r[2]));
83 Triangle unten2(Vector(l[0], l[1], l[2]),
84 Vector(r[0], l[1], r[2]),
85 Vector(l[0], l[1], r[2]));
86 unten1.render();
87 unten2.render();
88
89
90 Triangle hinten1(Vector(l[0], l[1], r[2]),
91 Vector(r[0], l[1], r[2]),
92 Vector(r[0], r[1], r[2]));
93 Triangle hinten2(Vector(l[0], l[1], r[2]),
94 Vector(r[0], r[1], r[2]),
95 Vector(l[0], r[1], r[2]));
96 hinten1.render();
97 hinten2.render();
98
99
100 Triangle vorn1(Vector(l[0], l[1], l[2]),
101 Vector(r[0], l[1], l[2]),
102 Vector(r[0], r[1], l[2]));
103 Triangle vorn2(Vector(l[0], l[1], l[2]),
104 Vector(r[0], r[1], l[2]),
105 Vector(l[0], r[1], l[2]));
106 vorn1.render();
107 vorn2.render();
108
109
110 Triangle links1(Vector(l[0], l[1], l[2]),
111 Vector(l[0], r[1], r[2]),
112 Vector(l[0], l[1], r[2]));
113 Triangle links2(Vector(l[0], l[1], l[2]),
114 Vector(l[0], r[1], l[2]),
115 Vector(l[0], r[1], r[2]));
116 links1.render();
117 links2.render();
118
119
120 Triangle rechts1(Vector(r[0], l[1], l[2]),
121 Vector(r[0], r[1], r[2]),
122 Vector(r[0], l[1], r[2]));
123 Triangle rechts2(Vector(r[0], l[1], l[2]),
124 Vector(r[0], r[1], l[2]),
125 Vector(r[0], r[1], r[2]));
126 rechts1.render();
127 rechts2.render();
128 #undef l
129 #undef r
130 }
131
132