Added Enhancement, removed type warnings,
started to refactor code in order to remove the unnecessary generality of the class.
This commit is contained in:
parent
e1fb47b786
commit
2624c550bd
|
@ -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,6 +197,7 @@ 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));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
printf("Tot Time %i msec TotRays %i, HitRays %i, ray/sec %3.1fk \n ",clock()-t00,TotRay,HitRay,float(TotRay)/(clock()-t00));
|
||||||
RestoreGL();
|
RestoreGL();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -373,16 +379,22 @@ 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 )
|
|
||||||
{
|
|
||||||
for(int i=0;i<m.vert.size();++i)
|
|
||||||
_VV[i]+= float(PixSeen[i])/float(PixSeen[i]-PixNotSeen[i]);
|
|
||||||
}
|
|
||||||
|
|
||||||
void DrawFill (MESH_TYPE &mm)
|
void DrawFill (MESH_TYPE &mm)
|
||||||
|
{
|
||||||
|
static GLuint dl=0;
|
||||||
|
if(mm.face.empty())
|
||||||
|
{ AMesh::VertexIterator vi;
|
||||||
|
glBegin(GL_POINTS);
|
||||||
|
for(vi=mm.vert.begin();vi!=mm.vert.end();++vi)
|
||||||
|
{
|
||||||
|
if(ColorFlag) glColor((*vi).C());
|
||||||
|
glVertex((*vi).P());
|
||||||
|
}
|
||||||
|
glEnd();
|
||||||
|
}
|
||||||
|
else
|
||||||
{
|
{
|
||||||
glBegin(GL_TRIANGLES);
|
glBegin(GL_TRIANGLES);
|
||||||
FaceIterator fi;
|
FaceIterator fi;
|
||||||
|
@ -394,11 +406,13 @@ void DrawFill(MESH_TYPE &mm)
|
||||||
}
|
}
|
||||||
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()];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if(!Enhance)
|
||||||
for(unsigned int i=0;i<VV2.size();++i)
|
for(unsigned int i=0;i<VV2.size();++i)
|
||||||
VV[i]=VV2[i]/VC[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)
|
||||||
|
|
Loading…
Reference in New Issue