- static const Vec3 v[] = {
- Vec3(-0.5, -0.5, -0.5), Vec3(0.5, -0.5, -0.5), Vec3(0.5, -0.5, 0.5), Vec3(-0.5, -0.5, 0.5),
- Vec3(-0.5, 0.5, -0.5), Vec3(0.5, 0.5, -0.5), Vec3(0.5, 0.5, 0.5), Vec3(-0.5, 0.5, 0.5)
- };
- return v[idx] * Vec3(max - min);
+ Vec3 v[] = {min, max};
+ static const int xidx[] = {0, 1, 1, 0, 0, 1, 1, 0};
+ static const int yidx[] = {0, 0, 0, 0, 1, 1, 1, 1};
+ static const int zidx[] = {0, 0, 1, 1, 0, 0, 1, 1};
+ 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();