From 7846c0bb3cac9efbf5feba7b5dd40f5d214f96c8 Mon Sep 17 00:00:00 2001 From: Matteo Dellepiane matteodelle Date: Thu, 31 May 2012 20:44:17 +0000 Subject: [PATCH] dellepiane: code optimization and removal of a bug (wrong FilterName) --- .../filter_mutualinfo.cpp | 25 ++++++++++++------- 1 file changed, 16 insertions(+), 9 deletions(-) diff --git a/src/meshlabplugins/filter_mutualinfoxml/filter_mutualinfo.cpp b/src/meshlabplugins/filter_mutualinfoxml/filter_mutualinfo.cpp index 450216de9..898fc1b01 100644 --- a/src/meshlabplugins/filter_mutualinfoxml/filter_mutualinfo.cpp +++ b/src/meshlabplugins/filter_mutualinfoxml/filter_mutualinfo.cpp @@ -31,7 +31,7 @@ bool MutualInfoPlugin::applyFilter( const QString& filterName,MeshDocument& md,E { if (md.mm() == NULL) return false; - if (filterName == "FilterMutualInfo") + if (filterName == "Image alignment: Mutual Information") { Solver solver; MutualInfo mutual; @@ -78,7 +78,7 @@ bool MutualInfoPlugin::applyFilter( const QString& filterName,MeshDocument& md,E break; } - +///// Loading geometry vcg::Point3f *vertices = new vcg::Point3f[align.mesh->vn]; vcg::Point3f *normals = new vcg::Point3f[align.mesh->vn]; @@ -96,15 +96,16 @@ bool MutualInfoPlugin::applyFilter( const QString& filterName,MeshDocument& md,E align.shot.Intrinsics.ViewportPx[0]=int((double)align.shot.Intrinsics.ViewportPx[1]*align.image->width()/align.image->height()); align.shot.Intrinsics.CenterPx[0]=(int)(align.shot.Intrinsics.ViewportPx[0]/2); - - for (int i=0; i<(int)(solver.maxiter/30); i++) - { - Log( "Step %i of %i.", i+1, (int)(solver.maxiter/30) ); - - this->glContext->makeCurrent(); + +///// Initialize GLContext + + Log( "Initialize GL"); + this->glContext->makeCurrent(); if (this->initGL() == false) return false; + Log( "Done"); + for(int i = 0; i < align.mesh->fn; i++) for(int k = 0; k < 3; k++) indices[k+i*3] = align.mesh->face[i].V(k) - &*align.mesh->vert.begin(); @@ -122,6 +123,11 @@ bool MutualInfoPlugin::applyFilter( const QString& filterName,MeshDocument& md,E indices, GL_STATIC_DRAW_ARB); glBindBufferARB(GL_ELEMENT_ARRAY_BUFFER_ARB, 0); +///// Mutual info calculation: every 30 iterations, the mail glarea is updated + + for (int i=0; i<(int)(solver.maxiter/30); i++) + { + Log( "Step %i of %i.", i+1, (int)(solver.maxiter/30) ); if (solver.fine_alignment) solver.optimize(&align, &mutual, align.shot); @@ -136,11 +142,12 @@ bool MutualInfoPlugin::applyFilter( const QString& filterName,MeshDocument& md,E md.rm()->shot.Intrinsics.PixelSizeMm[0]/=ratio; md.rm()->shot.Intrinsics.CenterPx[0]=(int)((float)md.rm()->shot.Intrinsics.ViewportPx[0]/2.0); md.rm()->shot.Intrinsics.CenterPx[1]=(int)((float)md.rm()->shot.Intrinsics.ViewportPx[1]/2.0); - this->glContext->doneCurrent(); + QList rl; rl << md.rm()->id(); md.updateRenderStateRasters(rl,RasterModel::RM_ALL); } + this->glContext->doneCurrent(); // it is safe to delete after copying data to VBO delete []vertices;