Improved float/double consistency removing some wrong Point3f and substitued with MeshType::CoordType

This commit is contained in:
Paolo Cignoni 2014-06-19 10:23:58 +00:00
parent 4198a3bd7c
commit c30978903d
1 changed files with 18 additions and 17 deletions

View File

@ -60,6 +60,7 @@ public:
typedef typename MeshType::FacePointer FacePointer; typedef typename MeshType::FacePointer FacePointer;
typedef typename MeshType::FaceIterator FaceIterator; typedef typename MeshType::FaceIterator FaceIterator;
typedef typename MeshType::ScalarType ScalarType; typedef typename MeshType::ScalarType ScalarType;
typedef typename MeshType::CoordType CoordType;
class ColorAvgInfo class ColorAvgInfo
{ {
@ -329,10 +330,10 @@ Note: The faux bit is used to color polygonal faces uniformly
Period is expressed in absolute terms. Period is expressed in absolute terms.
So as period it is meaningful could be to use something in the range of 1/10 of the bbox diag. So as period it is meaningful could be to use something in the range of 1/10 of the bbox diag.
*/ */
static void PerVertexPerlinNoise(MeshType& m, Point3f period, Point3f offset=Point3f(0,0,0)) static void PerVertexPerlinNoise(MeshType& m, CoordType period, CoordType offset=CoordType(0,0,0))
{ {
if(!HasPerVertexColor(m)) throw MissingComponentException("PerVertexColor"); if(!HasPerVertexColor(m)) throw MissingComponentException("PerVertexColor");
Point3<ScalarType> p[3]; CoordType p[3];
for(VertexIterator vi = m.vert.begin(); vi!=m.vert.end(); ++vi) for(VertexIterator vi = m.vert.begin(); vi!=m.vert.end(); ++vi)
{ {
if(!(*vi).IsD()){ if(!(*vi).IsD()){
@ -407,12 +408,12 @@ static int PerVertexBrightness(MeshType &m, float amount, const bool ProcessSele
{ {
if(!HasPerVertexColor(m)) throw MissingComponentException("PerVertexColor"); if(!HasPerVertexColor(m)) throw MissingComponentException("PerVertexColor");
int counter=0; int counter=0;
VertexIterator vi; VertexIterator vi;
for(vi=m.vert.begin();vi!=m.vert.end();++vi) //scan all the vertex... for(vi=m.vert.begin();vi!=m.vert.end();++vi) //scan all the vertex...
{ {
if(!(*vi).IsD()) //if it has not been deleted... if(!(*vi).IsD()) //if it has not been deleted...
{ {
if(!ProcessSelected || (*vi).IsS()) //if this vertex has been selected, do transormation if(!ProcessSelected || (*vi).IsS()) //if this vertex has been selected, do transormation
{ {
(*vi).C() = Color4b( (*vi).C() = Color4b(
math::Clamp(int((*vi).C()[0]+amount),0,255), math::Clamp(int((*vi).C()[0]+amount),0,255),
@ -423,7 +424,7 @@ static int PerVertexBrightness(MeshType &m, float amount, const bool ProcessSele
} }
} }
} }
return counter; return counter;
} }
/*! \brief Apply Contrast filter to the mesh with the given contrast factor. /*! \brief Apply Contrast filter to the mesh with the given contrast factor.
@ -489,17 +490,17 @@ static int PerVertexBrightnessContrast(MeshType &m, float brightness, float cont
static Color4b ColorBrightnessContrast(Color4b c, float brightness, float contrast) static Color4b ColorBrightnessContrast(Color4b c, float brightness, float contrast)
{ {
return Color4b( ValueBrightnessContrast(c[0], brightness, contrast), return Color4b( ValueBrightnessContrast(c[0], brightness, contrast),
ValueBrightnessContrast(c[1], brightness, contrast), ValueBrightnessContrast(c[1], brightness, contrast),
ValueBrightnessContrast(c[2], brightness, contrast), 1 ); ValueBrightnessContrast(c[2], brightness, contrast), 1 );
} }
static int ValueBrightnessContrast(unsigned char ivalue, float brightness, float contrast) static int ValueBrightnessContrast(unsigned char ivalue, float brightness, float contrast)
{ {
float value = float(ivalue)/255.0f; float value = float(ivalue)/255.0f;
if (brightness < 0.0) value = value * ( 1.0 + brightness); if (brightness < 0.0) value = value * ( 1.0 + brightness);
else value = value + ((1.0 - value) * brightness); else value = value + ((1.0 - value) * brightness);
value = (value - 0.5) * (tan ((contrast + 1) * M_PI/4) ) + 0.5; value = (value - 0.5) * (tan ((contrast + 1) * M_PI/4) ) + 0.5;
return math::Clamp<int>(255.0*value, 0, 255); return math::Clamp<int>(255.0*value, 0, 255);
} }
/*! \brief Invert the colors of the mesh. /*! \brief Invert the colors of the mesh.
@ -749,9 +750,9 @@ static int PerVertexEqualize(MeshType &m, unsigned int rgbMask, const bool Proce
} }
//for each histogram, compute the cumulative distribution function, and build a lookup table //for each histogram, compute the cumulative distribution function, and build a lookup table
int cdf_l[256], cdf_r[256], cdf_g[256], cdf_b[256]; int cdf_l[256], cdf_r[256], cdf_g[256], cdf_b[256];
cdf_l[0] = Hl.BinCount(0); cdf_r[0] = Hr.BinCount(0); cdf_g[0] = Hg.BinCount(0); cdf_b[0] = Hb.BinCount(0); cdf_l[0] = Hl.BinCount(0); cdf_r[0] = Hr.BinCount(0); cdf_g[0] = Hg.BinCount(0); cdf_b[0] = Hb.BinCount(0);
for(int i=1; i<256; i++){ for(int i=1; i<256; i++){
cdf_l[i] = Hl.BinCount(float(i)) + cdf_l[i-1]; cdf_l[i] = Hl.BinCount(float(i)) + cdf_l[i-1];
cdf_r[i] = Hr.BinCount(float(i)) + cdf_r[i-1]; cdf_r[i] = Hr.BinCount(float(i)) + cdf_r[i-1];
cdf_g[i] = Hg.BinCount(float(i)) + cdf_g[i-1]; cdf_g[i] = Hg.BinCount(float(i)) + cdf_g[i-1];