X-Git-Url: http://git.mutantstargoat.com/user/nuclear/?p=laserbrain_demo;a=blobdiff_plain;f=src%2Fgeom.cc;h=a96066fba377a03fc754a7f74fc7eac8398ad35a;hp=3a287a6a9a65289372a84d4736ef20c201a92ebb;hb=74034a459f47934ef60ba295033b9cb7e597d32a;hpb=6ecd4ecfa020964e4250bf9322c1a26ac4073b76 diff --git a/src/geom.cc b/src/geom.cc index 3a287a6..a96066f 100644 --- a/src/geom.cc +++ b/src/geom.cc @@ -1,5 +1,6 @@ -#include +#include #include +#include #include "geom.h" #include "app.h" @@ -144,6 +145,29 @@ 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 +{ + Vec3 c = (max - min) * 0.5f; + switch(pidx) { + case AABOX_PLANE_PX: + return Plane(Vec3(max.x, c.y, c.z), Vec3(1, 0, 0)); + case AABOX_PLANE_NX: + return Plane(Vec3(min.x, c.y, c.z), Vec3(-1, 0, 0)); + case AABOX_PLANE_PY: + return Plane(Vec3(c.x, max.x, c.z), Vec3(0, 1, 0)); + case AABOX_PLANE_NY: + return Plane(Vec3(c.x, min.x, c.z), Vec3(0, -1, 0)); + case AABOX_PLANE_PZ: + return Plane(Vec3(c.x, c.y, max.z), Vec3(0, 0, 1)); + case AABOX_PLANE_NZ: + return Plane(Vec3(c.x, c.y, 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};