using aabb planes as mirror planes
[laserbrain_demo] / src / geom.cc
index 3a287a6..1813eea 100644 (file)
@@ -1,5 +1,6 @@
-#include <algorithm>
+#include <stdlib.h>
 #include <float.h>
+#include <algorithm>
 #include "geom.h"
 #include "app.h"
 
@@ -144,6 +145,28 @@ Vec3 AABox::get_corner(int idx) const
        return Vec3(v[xidx[idx]].x, v[yidx[idx]].y, v[zidx[idx]].z);
 }
 
+Plane AABox::get_plane(int pidx) const
+{
+       switch(pidx) {
+       case AABOX_PLANE_PX:
+               return Plane(Vec3(max.x, 0, 0), Vec3(1, 0, 0));
+       case AABOX_PLANE_NX:
+               return Plane(Vec3(min.x, 0, 0), Vec3(-1, 0, 0));
+       case AABOX_PLANE_PY:
+               return Plane(Vec3(0, max.x, 0), Vec3(0, 1, 0));
+       case AABOX_PLANE_NY:
+               return Plane(Vec3(0, min.x, 0), Vec3(0, -1, 0));
+       case AABOX_PLANE_PZ:
+               return Plane(Vec3(0, 0, max.z), Vec3(0, 0, 1));
+       case AABOX_PLANE_NZ:
+               return Plane(Vec3(0, 0, min.z), Vec3(0, 0, -1));
+       default:
+               break;
+       }
+       abort();
+       return Plane();
+}
+
 bool AABox::intersect(const Ray &ray, HitPoint *hit) const
 {
        Vec3 param[2] = {min, max};