summaryrefslogtreecommitdiff
path: root/src/linalg.cc
diff options
context:
space:
mode:
authorDon Bright <hugh.m.bright@gmail.com>2011-12-24 13:50:24 (GMT)
committerDon Bright <hugh.m.bright@gmail.com>2011-12-24 13:50:24 (GMT)
commit3572251a9139bf95f2217c2e9957668b6c82ccdc (patch)
treec2dfdef220b78f0d2cf86f37f99e3bf36477f19e /src/linalg.cc
parent10c96326866c8256e82f0092a18f4f4e3ca06a74 (diff)
commit Marius' linalg.cc
Diffstat (limited to 'src/linalg.cc')
-rw-r--r--src/linalg.cc27
1 files changed, 27 insertions, 0 deletions
diff --git a/src/linalg.cc b/src/linalg.cc
new file mode 100644
index 0000000..30f23af
--- /dev/null
+++ b/src/linalg.cc
@@ -0,0 +1,27 @@
+#include "linalg.h"
+
+// FIXME: We can achieve better pruning by either:
+// o Recalculate the box based on the transformed object
+// o Store boxes are oriented bounding boxes and implement oriented
+// bbox intersection
+
+// FIXME: This function can be generalized, but we don't need it atm.
+
+/*!
+ Transforms the given bounding box by transforming each of its 8 vertices.
+ Returns a new bounding box.
+*/
+BoundingBox operator*(const Transform3d &m, const BoundingBox &box)
+{
+ BoundingBox newbox;
+ Vector3d boxvec[2] = { box.min(), box.max() };
+ for (int k=0;k<2;k++) {
+ for (int j=0;j<2;j++) {
+ for (int i=0;i<2;i++) {
+ newbox.extend(m * Vector3d(boxvec[i][0], boxvec[j][1], boxvec[k][2]));
+ }
+ }
+ }
+ return newbox;
+}
+
contact: Jan Huwald // Impressum