X-Git-Url: http://git.mutantstargoat.com/user/nuclear/?p=laserbrain_demo;a=blobdiff_plain;f=src%2Fblob_exhibit.cc;h=cd29e9629e4d1ac277473f05003834bf620538ba;hp=58522d9303997fa74eab8e3ad94d1ea305b62644;hb=37b68f014b46922b885c6344d6b069cba3c9c3c5;hpb=64b09a921ac6c46f8a7ff6e25c9aef3452cdc6b8 diff --git a/src/blob_exhibit.cc b/src/blob_exhibit.cc index 58522d9..cd29e96 100644 --- a/src/blob_exhibit.cc +++ b/src/blob_exhibit.cc @@ -23,6 +23,7 @@ static Metaball def_mball_data[] = { }; struct BlobPriv { + AABox vol; metasurface *msurf; Metaball mballs[NUM_MBALLS]; Texture *tex; @@ -34,6 +35,7 @@ BlobExhibit::BlobExhibit() for(int i=0; imballs[i] = def_mball_data[i]; } + priv->vol = AABox(Vec3(-3.5, -3.5, -3.5), Vec3(3.5, 3.5, 3.5)); } BlobExhibit::~BlobExhibit() @@ -49,7 +51,8 @@ bool BlobExhibit::init() } msurf_set_threshold(priv->msurf, 8); msurf_set_inside(priv->msurf, MSURF_GREATER); - msurf_set_bounds(priv->msurf, -3.5, -3.5, -3.5, 3.5, 3.5, 3.5); + msurf_set_bounds(priv->msurf, priv->vol.min.x, priv->vol.min.y, priv->vol.min.z, + priv->vol.max.x, priv->vol.max.y, priv->vol.max.z); msurf_enable(priv->msurf, MSURF_NORMALIZE); priv->tex = texman.get_texture("data/sphmap.jpg"); @@ -72,6 +75,10 @@ void BlobExhibit::update(float dt) float xmin, xmax, ymin, ymax, zmin, zmax; int xres, yres, zres; + if(!msurf_voxels(priv->msurf)) { + return; + } + msurf_get_bounds(priv->msurf, &xmin, &ymin, &zmin, &xmax, &ymax, &zmax); msurf_get_resolution(priv->msurf, &xres, &yres, &zres); @@ -86,10 +93,6 @@ void BlobExhibit::update(float dt) priv->mballs[i].pos.z = -cos(t) * priv->mballs[i].path_scale.z + priv->mballs[i].path_offset.z; } - if(!msurf_voxels(priv->msurf)) { - return; - } - float max_energy = 0.0f; #pragma omp parallel for @@ -137,6 +140,12 @@ void BlobExhibit::draw() const glEnable(GL_TEXTURE_GEN_S); glEnable(GL_TEXTURE_GEN_T); + if(node) { + glMatrixMode(GL_MODELVIEW); + glPushMatrix(); + glMultMatrixf(node->get_matrix()[0]); + } + glMatrixMode(GL_TEXTURE); glLoadIdentity(); glScalef(1, -1, 1); @@ -180,6 +189,16 @@ void BlobExhibit::draw() const glLoadIdentity(); glMatrixMode(GL_MODELVIEW); + if(node) { + glPopMatrix(); + } glPopAttrib(); } + +const AABox &BlobExhibit::get_aabox() const +{ + Box box = Box(priv->vol, node ? node->get_matrix() : Mat4::identity); + calc_bounding_aabox(&aabb, &box); + return aabb; +}