Added management of per-vertex quality values during simplification to amplify initial quadric values
This commit is contained in:
parent
b998bbea6a
commit
b14cd10824
|
@ -148,7 +148,7 @@ public:
|
||||||
bool QualityCheck;
|
bool QualityCheck;
|
||||||
bool OptimalPlacement;
|
bool OptimalPlacement;
|
||||||
bool MemoryLess;
|
bool MemoryLess;
|
||||||
bool ComplexCheck;
|
bool QualityWeight;
|
||||||
bool ScaleIndependent;
|
bool ScaleIndependent;
|
||||||
//***********************
|
//***********************
|
||||||
bool QualityQuadric; // During the initialization manage all the edges as border edges adding a set of additional quadrics that are useful mostly for keeping face aspect ratio good.
|
bool QualityQuadric; // During the initialization manage all the edges as border edges adding a set of additional quadrics that are useful mostly for keeping face aspect ratio good.
|
||||||
|
@ -354,7 +354,7 @@ public:
|
||||||
Params().QualityQuadric=false;
|
Params().QualityQuadric=false;
|
||||||
Params().OptimalPlacement=true;
|
Params().OptimalPlacement=true;
|
||||||
Params().ScaleIndependent=true;
|
Params().ScaleIndependent=true;
|
||||||
Params().ComplexCheck=false;
|
Params().QualityWeight=false;
|
||||||
Params().QuadricEpsilon =1e-15;
|
Params().QuadricEpsilon =1e-15;
|
||||||
Params().ScaleFactor=1.0;
|
Params().ScaleFactor=1.0;
|
||||||
|
|
||||||
|
@ -549,7 +549,12 @@ static void InitQuadric(TriMeshType &m)
|
||||||
q.ByPlane(p);
|
q.ByPlane(p);
|
||||||
|
|
||||||
for(j=0;j<3;++j)
|
for(j=0;j<3;++j)
|
||||||
if( (*pf).V(j)->IsW() ) QH::Qd((*pf).V(j)) += q; // Sommo la quadrica ai vertici
|
if( (*pf).V(j)->IsW() )
|
||||||
|
{
|
||||||
|
if(Params().QualityWeight)
|
||||||
|
q*=(*pf).V(j)->Q();
|
||||||
|
QH::Qd((*pf).V(j)) += q; // Sommo la quadrica ai vertici
|
||||||
|
}
|
||||||
|
|
||||||
for(j=0;j<3;++j)
|
for(j=0;j<3;++j)
|
||||||
if( (*pf).IsB(j) || Params().QualityQuadric ) // Bordo!
|
if( (*pf).IsB(j) || Params().QualityQuadric ) // Bordo!
|
||||||
|
@ -581,23 +586,6 @@ static void InitQuadric(TriMeshType &m)
|
||||||
//printf("Scale factor =%f\n",Params().ScaleFactor );
|
//printf("Scale factor =%f\n",Params().ScaleFactor );
|
||||||
//printf("bb (%5.2f %5.2f %5.2f)-(%5.2f %5.2f %5.2f) Diag %f\n",m.bbox.min[0],m.bbox.min[1],m.bbox.min[2],m.bbox.max[0],m.bbox.max[1],m.bbox.max[2],m.bbox.Diag());
|
//printf("bb (%5.2f %5.2f %5.2f)-(%5.2f %5.2f %5.2f) Diag %f\n",m.bbox.min[0],m.bbox.min[1],m.bbox.min[2],m.bbox.max[0],m.bbox.max[1],m.bbox.max[2],m.bbox.Diag());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
if(Params().ComplexCheck)
|
|
||||||
{
|
|
||||||
// secondo loop per diminuire quadriche complex (se non c'erano i complex si poteva fare in un giro solo)
|
|
||||||
//for(pf=m.face.begin();pf!=m.face.end();++pf)
|
|
||||||
//if( !(*pf).IsD() && (*pf).IsR() )
|
|
||||||
// if((*pf).V(0)->IsR() &&(*pf).V(1)->IsR() &&(*pf).V(2)->IsR())
|
|
||||||
// {
|
|
||||||
// for(j=0;j<3;++j)
|
|
||||||
// if((*pf).IsCF(j)) // Complex!
|
|
||||||
// {
|
|
||||||
// if( (*pf).V (j)->IsW() ) (*pf).V (j)->q *= 0.01; // Scalo le quadriche
|
|
||||||
// if( (*pf).V1(j)->IsW() ) (*pf).V1(j)->q *= 0.01;
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue