author | Radek Brich <radek.brich@devl.cz> |
Sat, 29 Dec 2007 13:53:33 +0100 | |
branch | pyrit |
changeset 42 | fbdeb3e04543 |
parent 34 | 28f6e8b9d5d1 |
child 44 | 3763b26244f0 |
permissions | -rw-r--r-- |
34
28f6e8b9d5d1
quaternion moved to extra header file
Radek Brich <radek.brich@devl.cz>
parents:
28
diff
changeset
|
1 |
/* |
28f6e8b9d5d1
quaternion moved to extra header file
Radek Brich <radek.brich@devl.cz>
parents:
28
diff
changeset
|
2 |
* Pyrit Ray Tracer |
28f6e8b9d5d1
quaternion moved to extra header file
Radek Brich <radek.brich@devl.cz>
parents:
28
diff
changeset
|
3 |
* file: container.cc |
28f6e8b9d5d1
quaternion moved to extra header file
Radek Brich <radek.brich@devl.cz>
parents:
28
diff
changeset
|
4 |
* |
28f6e8b9d5d1
quaternion moved to extra header file
Radek Brich <radek.brich@devl.cz>
parents:
28
diff
changeset
|
5 |
* Radek Brich, 2006-2007 |
28f6e8b9d5d1
quaternion moved to extra header file
Radek Brich <radek.brich@devl.cz>
parents:
28
diff
changeset
|
6 |
*/ |
28f6e8b9d5d1
quaternion moved to extra header file
Radek Brich <radek.brich@devl.cz>
parents:
28
diff
changeset
|
7 |
|
24
d0d76e8a5203
new C++ demo: realtime_dragon.cc
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
8 |
#include "common.h" |
d0d76e8a5203
new C++ demo: realtime_dragon.cc
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
9 |
#include "container.h" |
d0d76e8a5203
new C++ demo: realtime_dragon.cc
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
10 |
|
d0d76e8a5203
new C++ demo: realtime_dragon.cc
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
11 |
void Container::addShape(Shape* aShape) |
d0d76e8a5203
new C++ demo: realtime_dragon.cc
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
12 |
{ |
28
ffe83ca074f3
smooth triangles (aka Phong shading)
Radek Brich <radek.brich@devl.cz>
parents:
24
diff
changeset
|
13 |
shapes.push_back(aShape); |
ffe83ca074f3
smooth triangles (aka Phong shading)
Radek Brich <radek.brich@devl.cz>
parents:
24
diff
changeset
|
14 |
if (shapes.size() == 0) { |
ffe83ca074f3
smooth triangles (aka Phong shading)
Radek Brich <radek.brich@devl.cz>
parents:
24
diff
changeset
|
15 |
/* initialize bounding box */ |
ffe83ca074f3
smooth triangles (aka Phong shading)
Radek Brich <radek.brich@devl.cz>
parents:
24
diff
changeset
|
16 |
bbox = aShape->get_bbox(); |
ffe83ca074f3
smooth triangles (aka Phong shading)
Radek Brich <radek.brich@devl.cz>
parents:
24
diff
changeset
|
17 |
} else { |
ffe83ca074f3
smooth triangles (aka Phong shading)
Radek Brich <radek.brich@devl.cz>
parents:
24
diff
changeset
|
18 |
/* adjust bounding box */ |
ffe83ca074f3
smooth triangles (aka Phong shading)
Radek Brich <radek.brich@devl.cz>
parents:
24
diff
changeset
|
19 |
BBox shapebb = aShape->get_bbox(); |
ffe83ca074f3
smooth triangles (aka Phong shading)
Radek Brich <radek.brich@devl.cz>
parents:
24
diff
changeset
|
20 |
if (shapebb.L.x < bbox.L.x) bbox.L.x = shapebb.L.x; |
ffe83ca074f3
smooth triangles (aka Phong shading)
Radek Brich <radek.brich@devl.cz>
parents:
24
diff
changeset
|
21 |
if (shapebb.L.y < bbox.L.y) bbox.L.y = shapebb.L.y; |
ffe83ca074f3
smooth triangles (aka Phong shading)
Radek Brich <radek.brich@devl.cz>
parents:
24
diff
changeset
|
22 |
if (shapebb.L.z < bbox.L.z) bbox.L.z = shapebb.L.z; |
ffe83ca074f3
smooth triangles (aka Phong shading)
Radek Brich <radek.brich@devl.cz>
parents:
24
diff
changeset
|
23 |
if (shapebb.H.x > bbox.H.x) bbox.H.x = shapebb.H.x; |
ffe83ca074f3
smooth triangles (aka Phong shading)
Radek Brich <radek.brich@devl.cz>
parents:
24
diff
changeset
|
24 |
if (shapebb.H.y > bbox.H.y) bbox.H.y = shapebb.H.y; |
ffe83ca074f3
smooth triangles (aka Phong shading)
Radek Brich <radek.brich@devl.cz>
parents:
24
diff
changeset
|
25 |
if (shapebb.H.z > bbox.H.z) bbox.H.z = shapebb.H.z; |
ffe83ca074f3
smooth triangles (aka Phong shading)
Radek Brich <radek.brich@devl.cz>
parents:
24
diff
changeset
|
26 |
} |
24
d0d76e8a5203
new C++ demo: realtime_dragon.cc
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
27 |
}; |
d0d76e8a5203
new C++ demo: realtime_dragon.cc
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
28 |
|
d0d76e8a5203
new C++ demo: realtime_dragon.cc
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
29 |
Shape *Container::nearest_intersection(const Shape *origin_shape, const Ray &ray, |
d0d76e8a5203
new C++ demo: realtime_dragon.cc
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
30 |
Float &nearest_distance) |
d0d76e8a5203
new C++ demo: realtime_dragon.cc
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
31 |
{ |
28
ffe83ca074f3
smooth triangles (aka Phong shading)
Radek Brich <radek.brich@devl.cz>
parents:
24
diff
changeset
|
32 |
Shape *nearest_shape = NULL; |
ffe83ca074f3
smooth triangles (aka Phong shading)
Radek Brich <radek.brich@devl.cz>
parents:
24
diff
changeset
|
33 |
ShapeList::iterator shape; |
ffe83ca074f3
smooth triangles (aka Phong shading)
Radek Brich <radek.brich@devl.cz>
parents:
24
diff
changeset
|
34 |
for (shape = shapes.begin(); shape != shapes.end(); shape++) |
ffe83ca074f3
smooth triangles (aka Phong shading)
Radek Brich <radek.brich@devl.cz>
parents:
24
diff
changeset
|
35 |
if (*shape != origin_shape && (*shape)->intersect(ray, nearest_distance)) |
ffe83ca074f3
smooth triangles (aka Phong shading)
Radek Brich <radek.brich@devl.cz>
parents:
24
diff
changeset
|
36 |
nearest_shape = *shape; |
ffe83ca074f3
smooth triangles (aka Phong shading)
Radek Brich <radek.brich@devl.cz>
parents:
24
diff
changeset
|
37 |
return nearest_shape; |
24
d0d76e8a5203
new C++ demo: realtime_dragon.cc
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
38 |
} |