Added Enhancement, removed type warnings,

started to refactor code in order to remove the unnecessary generality of the class.
This commit is contained in:
Paolo Cignoni 2005-11-12 06:47:18 +00:00
parent e1fb47b786
commit 2624c550bd
1 changed files with 44 additions and 26 deletions

View File

@ -24,6 +24,9 @@
History History
$Log: not supported by cvs2svn $ $Log: not supported by cvs2svn $
Revision 1.8 2004/09/28 09:45:17 cignoni
Added MapFalseColor
Revision 1.7 2004/09/16 14:23:57 ponchio Revision 1.7 2004/09/16 14:23:57 ponchio
fixed gcc template compatibility issues. fixed gcc template compatibility issues.
@ -153,7 +156,7 @@ template <class MESH_TYPE, int MAXVIS=2048> class VisShader
void AddPixelCount(std::vector<float> &_VV, const std::vector<int> &PixSeen) void AddPixelCount(std::vector<float> &_VV, const std::vector<int> &PixSeen)
{ {
assert(_VV.size()==PixSeen.size()); assert(_VV.size()==PixSeen.size());
for(int i=0;i<PixSeen.size();++i) for(unsigned int i=0;i<PixSeen.size();++i)
if(PixSeen[i]>0) _VV[i]+= 1; if(PixSeen[i]>0) _VV[i]+= 1;
} }
@ -171,7 +174,9 @@ Funzioni ad alto livello che computano le Visibility Mask per varie distribuzion
*******************************/ *******************************/
// Funzione Generica chiamata da tutte le seguenti // Funzione Generica
// Calcola l'occlusion in base all'insieme VN di direzioni.
void Compute( CallBack *cb) void Compute( CallBack *cb)
{ {
//cb(buf.format("Start to compute %i dir\n",VN.size())); //cb(buf.format("Start to compute %i dir\n",VN.size()));
@ -180,7 +185,7 @@ void Compute( CallBack *cb)
VV.resize(m.vert.size()); VV.resize(m.vert.size());
std::vector<int> PixSeen(VV.size(),0); std::vector<int> PixSeen(VV.size(),0);
int TotRay=0,HitRay=0; int TotRay=0,HitRay=0;
for(int i=0;i<VN.size();++i) for(unsigned int i=0;i<VN.size();++i)
{ {
int t0=clock(); int t0=clock();
fill(PixSeen.begin(),PixSeen.end(),0); fill(PixSeen.begin(),PixSeen.end(),0);
@ -192,7 +197,8 @@ void Compute( CallBack *cb)
printf("%3i/%i : %i msec -- TotRays %i, HitRays %i, ray/sec %3.1fk \n ",i,VN.size(),t1-t0,TotRay,HitRay,float(TotRay)/(clock()-t00)); printf("%3i/%i : %i msec -- TotRays %i, HitRays %i, ray/sec %3.1fk \n ",i,VN.size(),t1-t0,TotRay,HitRay,float(TotRay)/(clock()-t00));
} }
RestoreGL(); printf("Tot Time %i msec TotRays %i, HitRays %i, ray/sec %3.1fk \n ",clock()-t00,TotRay,HitRay,float(TotRay)/(clock()-t00));
RestoreGL();
} }
void ComputeHalf(int nn, Point3x &dir, CallBack *cb) void ComputeHalf(int nn, Point3x &dir, CallBack *cb)
@ -373,32 +379,40 @@ template <class MESH_TYPE> class VertexVisShader : public VisShader<MESH_TYPE>
} }
void Init() { VV.resize(m.vert.size()); } void Init() { VV.resize(m.vert.size()); }
// Vis::VisMode Id() {return Vis::VMPerVert;};
void Compute(int nn); void Compute(int nn);
void AddPixelCount(std::vector<float> &_VV, std::vector<int> &PixSeen, std::vector<int> &PixNotSeen ) void DrawFill (MESH_TYPE &mm)
{
for(int i=0;i<m.vert.size();++i)
_VV[i]+= float(PixSeen[i])/float(PixSeen[i]-PixNotSeen[i]);
}
void DrawFill(MESH_TYPE &mm)
{ {
glBegin(GL_TRIANGLES); static GLuint dl=0;
FaceIterator fi; if(mm.face.empty())
for(fi=mm.face.begin();fi!=mm.face.end();++fi) { AMesh::VertexIterator vi;
{ glBegin(GL_POINTS);
glVertex((*fi).V(0)->P()); for(vi=mm.vert.begin();vi!=mm.vert.end();++vi)
glVertex((*fi).V(1)->P()); {
glVertex((*fi).V(2)->P()); if(ColorFlag) glColor((*vi).C());
glVertex((*vi).P());
}
glEnd();
}
else
{
glBegin(GL_TRIANGLES);
FaceIterator fi;
for(fi=mm.face.begin();fi!=mm.face.end();++fi)
{
glVertex((*fi).V(0)->P());
glVertex((*fi).V(1)->P());
glVertex((*fi).V(2)->P());
}
glEnd();
} }
glEnd();
} }
/***************************************************************************/ /***************************************************************************/
//VertexVisibility //VertexVisibility
// Funzione Principale restituisce per ogni entita' quanti px si vedono o no. // Funzione Principale restituisce per ogni entita' quanti px si vedono o no.
int GLAccumPixel( std::vector<int> &PixSeen) int GLAccumPixel( std::vector<int> &PixSeen)
{ {
SimplePic<float> snapZ; SimplePic<float> snapZ;
@ -441,7 +455,7 @@ int GLAccumPixel( std::vector<int> &PixSeen)
glGetIntegerv(GL_VIEWPORT,VP); glGetIntegerv(GL_VIEWPORT,VP);
double tx,ty,tz; double tx,ty,tz;
for(int i=0;i<m.vert.size();++i) for(unsigned int i=0;i<m.vert.size();++i)
{ {
gluProject(m.vert[i].P()[0],m.vert[i].P()[1],m.vert[i].P()[2], gluProject(m.vert[i].P()[0],m.vert[i].P()[1],m.vert[i].P()[2],
MM,MP,VP, MM,MP,VP,
@ -469,7 +483,7 @@ int GLAccumPixel( std::vector<int> &PixSeen)
return cnt; return cnt;
} }
void SmoothVisibility() void SmoothVisibility(bool Enhance=false)
{ {
FaceIterator fi; FaceIterator fi;
std::vector<float> VV2; std::vector<float> VV2;
@ -482,17 +496,21 @@ void SmoothVisibility()
++VC[(*fi).V(i)-&*m.vert.begin()]; ++VC[(*fi).V(i)-&*m.vert.begin()];
} }
for(unsigned int i=0;i<VV2.size();++i) if(!Enhance)
VV[i]=VV2[i]/VC[i]; for(unsigned int i=0;i<VV2.size();++i)
VV[i]=VV2[i]/VC[i];
else
for(unsigned int i=0;i<VV2.size();++i)
VV[i]=VV[i]+ (VV[i]-VV2[i]/VC[i])*.5;
} }
void MapFalseColor() void MapFalseColor()
{ {
float minv=*min_element(VV.begin(),VV.end()); float minv=*min_element(VV.begin(),VV.end());
float maxv=*max_element(VV.begin(),VV.end()); float maxv=*max_element(VV.begin(),VV.end());
printf("Visibility Range %f %f\n", minv,maxv); printf("Visibility Range %f %f\n", minv,maxv);
MapFalseColor(minv, maxv); MapFalseColor(minv, maxv);
} }
void MapFalseColor(float minv, float maxv) void MapFalseColor(float minv, float maxv)