First commit...
This commit is contained in:
parent
1c171b9c7d
commit
23653c6752
|
@ -0,0 +1,113 @@
|
||||||
|
/*****************************************************************************
|
||||||
|
* VCGLib *
|
||||||
|
* *
|
||||||
|
* Visual Computing Group o> *
|
||||||
|
* IEI Institute, CNUCE Institute, CNR Pisa <| *
|
||||||
|
* / \ *
|
||||||
|
* Copyright(C) 1999 by Paolo Cignoni, Claudio Rocchini *
|
||||||
|
* All rights reserved. *
|
||||||
|
* *
|
||||||
|
* Permission to use, copy, modify, distribute and sell this software and *
|
||||||
|
* its documentation for any purpose is hereby granted without fee, provided *
|
||||||
|
* that the above copyright notice appear in all copies and that both that *
|
||||||
|
* copyright notice and this permission notice appear in supporting *
|
||||||
|
* documentation. the author makes no representations about the suitability *
|
||||||
|
* of this software for any purpose. It is provided "as is" without express *
|
||||||
|
* or implied warranty. *
|
||||||
|
* *
|
||||||
|
*****************************************************************************/
|
||||||
|
/****************************************************************************
|
||||||
|
History
|
||||||
|
|
||||||
|
1999 Feb 02 First Draft.
|
||||||
|
|
||||||
|
1999 May 15 Corrected Scope of sqrt.. (added ::)
|
||||||
|
|
||||||
|
2000 Jan 26 inserito include condizionale
|
||||||
|
corretto Distance() e init()
|
||||||
|
Jan 28 aggiunti Sin e Cos (per quaternion!) (con assert se uno li usa con int!)
|
||||||
|
Jun 26 Aggiunto Gauss33 (prima stava in lfield3)
|
||||||
|
Nota: era stato scritto con Fabs invece di Abs....
|
||||||
|
Jun 30 Aggiunto TRACE e Definizione M_PI
|
||||||
|
Jul 4 aggiunto un cast a FL_TYPE in Gauss33;
|
||||||
|
5 Tolti i parametri inutili (warning 4100)
|
||||||
|
6 Aggiunto include assert.h
|
||||||
|
2001 Jul 17 TRACE Release compilabile in unix (CR)
|
||||||
|
2002 Jan 17 Aggiunte conversioni Radianti in Gradi
|
||||||
|
Feb 27 Aggiunto tipo per Generica funzione di Callback
|
||||||
|
Jul 28 Aggiunta seconda callback (utile per progress bar) (pc)
|
||||||
|
2003 Jan 09 Aggiunta Clamp (pc)
|
||||||
|
2003 Jan 17 Aggiunta MaxVal (mt)
|
||||||
|
Sep 10 [BCB] Ridefinite sqrtf e fabsf per C++ Builder
|
||||||
|
19 Aggiunto suffisso 'u' per evitare un warning (pc)
|
||||||
|
|
||||||
|
****************************************************************************/
|
||||||
|
|
||||||
|
#ifndef __VCGLIB_MATH_BASE
|
||||||
|
#define __VCGLIB_MATH_BASE
|
||||||
|
|
||||||
|
#include <math.h>
|
||||||
|
#include <assert.h>
|
||||||
|
|
||||||
|
#ifdef __BORLANDC__
|
||||||
|
float sqrtf (float v) {return sqrt(v);}
|
||||||
|
float fabsf (float v) {return fabs(v);}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
namespace vcg {
|
||||||
|
|
||||||
|
template<class T> class Math
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
static T inline Sqrt(const T v);
|
||||||
|
static T inline Abs(const T v);
|
||||||
|
|
||||||
|
static const T MaxVal;
|
||||||
|
static T ToDeg(const T a);
|
||||||
|
static T ToRad(const T a);
|
||||||
|
};
|
||||||
|
|
||||||
|
T Math<float>::Sqrt(const float v)
|
||||||
|
{ return sqrtf(v); }
|
||||||
|
T Math<float>::Abs(const float v)
|
||||||
|
{ return fabsf(v); }
|
||||||
|
T Math<double>::Sqrt(const double v)
|
||||||
|
{ return sqrt(v); }
|
||||||
|
T Math<double>::Abs(const double v)
|
||||||
|
{ return fabs(v); }
|
||||||
|
|
||||||
|
|
||||||
|
const unsigned char Math<unsigned char >::MaxVal = 255;
|
||||||
|
const short Math<short >::MaxVal = 127;
|
||||||
|
const unsigned short Math<unsigned short >::MaxVal = 0xFFFFu;
|
||||||
|
const short Math<short >::MaxVal = 0x7FFF;
|
||||||
|
const float Math<float >::MaxVal = 3.4E38F;
|
||||||
|
const int Math<int >::MaxVal = 2147483647;
|
||||||
|
const long double Math<long double >::MaxVal = 1.2E308;
|
||||||
|
const double Math<double >::MaxVal = 1.7E308;
|
||||||
|
const __int64 Math<__int64 >::MaxVal = 9223372036854775807;
|
||||||
|
|
||||||
|
/* Some <math.h> files do not define M_PI... */
|
||||||
|
#ifndef M_PI
|
||||||
|
#define M_PI 3.14159265358979323846
|
||||||
|
#endif
|
||||||
|
|
||||||
|
template <class SCALAR>
|
||||||
|
inline SCALAR Clamp( const SCALAR & val, const SCALAR& minval, const SCALAR& maxval)
|
||||||
|
{
|
||||||
|
if(val < minval) return minval;
|
||||||
|
if(val > maxval) return maxval;
|
||||||
|
return val;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
inline float ToDeg(const float &a){return a*180.0f/float(M_PI);}
|
||||||
|
inline float ToRad(const float &a){return float(M_PI)*a/180.0f;}
|
||||||
|
inline double ToDeg(const double &a){return a*180.0/M_PI;}
|
||||||
|
inline double ToRad(const double &a){return M_PI*a/180.0;}
|
||||||
|
|
||||||
|
} // End namespace
|
||||||
|
|
||||||
|
|
||||||
|
#endif
|
|
@ -18,59 +18,9 @@
|
||||||
*****************************************************************************/
|
*****************************************************************************/
|
||||||
/*#**************************************************************************
|
/*#**************************************************************************
|
||||||
History
|
History
|
||||||
|
$Id: point3.h,v 1.2 2004-02-06 02:17:09 cignoni Exp $
|
||||||
|
$Log: not supported by cvs2svn $
|
||||||
|
|
||||||
1999 Feb 02 First Draft.
|
|
||||||
Mar 15 First Working release
|
|
||||||
Jul 10 Reindented and reformatted
|
|
||||||
Fixed != bug
|
|
||||||
Fixed Eq bug
|
|
||||||
Dec 21 Added Quality and Normal
|
|
||||||
|
|
||||||
Tolti ;
|
|
||||||
Corretto Distance
|
|
||||||
corretta inclusione utility
|
|
||||||
|
|
||||||
2000 Jan 26 inserito include condizionale
|
|
||||||
corretto Distance() e init()
|
|
||||||
Jan 28 tolti vcg_ dalle funzioni di utility
|
|
||||||
Jan 30 Aggiunti funzioni di accesso x,y,z const.
|
|
||||||
Feb 15 Corretta SquaredDistance(Point3,Point3)
|
|
||||||
Mar 29 Corretta Scale
|
|
||||||
May 09 Aggiunto operatore cast
|
|
||||||
Jun 9 Corretto Normal(p0,p1,p2) (forniva la normale opposta!)
|
|
||||||
Jun 26 Corretto il nome del costrutture da Point3_FT -> Point3
|
|
||||||
(syntax error per il gcc)
|
|
||||||
Aggiunta compilazione condizionale per l'operatore cast
|
|
||||||
30 Corretto Quality nel caso degenere tre punti coincidenti;
|
|
||||||
Jul 04 Aggiunto ^=
|
|
||||||
19 Aggiunta funzione PSDist (distanza segmento punto)
|
|
||||||
Sep 7 Modificata Quality, ora e' piu' veloce.
|
|
||||||
Nov 13 Corretto angle
|
|
||||||
20 Spostato Point3nt in un file a parte
|
|
||||||
Dec 12 Aggiunto AngleN (pc)
|
|
||||||
19 Ricorretto Angle (not a number per normali opposte);
|
|
||||||
2001 Jan 15 Corretto Angle, c'era un errore di sintassi...
|
|
||||||
Feb 16 Aggiunto Scale (cr,pc)
|
|
||||||
Aggiunto temporaneo print di punti (cr)
|
|
||||||
Cambiato per uniformita Norm2 -> SquaredNorm;
|
|
||||||
messo le print di punti sotto if defined FILE
|
|
||||||
May 21 Aggiunto polar
|
|
||||||
Aggiunto Zero
|
|
||||||
Jun 22 Aggiunta funzione import
|
|
||||||
Jul 09 Aggiunta Ext
|
|
||||||
Sep 19 Import diventa un membro
|
|
||||||
Nov 15 Aggiunta funzione stable_dot: prodotto scalare corretto num. (CR)
|
|
||||||
Dec 10 Deprecate alcune funzioni (CR)
|
|
||||||
- unario membro (CR)
|
|
||||||
v privato!!! (CR) aggiunta funzione V()
|
|
||||||
Dec 12 Aggiunta sotto ifdef l'inclusione della versione assembler p4 (inusabile!)(pc)
|
|
||||||
19 Reso v protected invece che private; (pc);
|
|
||||||
2002 Mar 6 CORRETTA NORMAL(). faceva sempre la normalizzazione. ora non la fa piu' e
|
|
||||||
aggiunta la NormalizedNormal();
|
|
||||||
7 Aggiunta Jitter
|
|
||||||
2003 Sep 10 [BCB] Aggiunti gli specificatori di template (<T>)
|
|
||||||
Sep 30 Spostata la definizione delle funioni di mapping vcg->opengl (glVertex()..)
|
|
||||||
cosiche' Point3d non debba essere incluso la prima volta dopo opengl
|
|
||||||
****************************************************************************/
|
****************************************************************************/
|
||||||
|
|
||||||
#pragma once
|
#pragma once
|
||||||
|
@ -85,6 +35,9 @@
|
||||||
|
|
||||||
namespace vcg {
|
namespace vcg {
|
||||||
|
|
||||||
|
/** The class for representing a 3D point
|
||||||
|
* More details about this class.
|
||||||
|
*/
|
||||||
|
|
||||||
template <class T> class Point3
|
template <class T> class Point3
|
||||||
{
|
{
|
||||||
|
@ -120,7 +73,7 @@ public:
|
||||||
_v[0]= p._v[0]; _v[1]= p._v[1]; _v[2]= p._v[2];
|
_v[0]= p._v[0]; _v[1]= p._v[1]; _v[2]= p._v[2];
|
||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
inline void Zero()
|
inline void zero()
|
||||||
{
|
{
|
||||||
_v[0] = 0;
|
_v[0] = 0;
|
||||||
_v[1] = 0;
|
_v[1] = 0;
|
||||||
|
@ -190,19 +143,6 @@ public:
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Deprecato ???
|
|
||||||
// Operatori di modifica
|
|
||||||
inline Point3 & operator ^= ( Point3 const & p )
|
|
||||||
{
|
|
||||||
T t0 = _v[0];
|
|
||||||
T t1 = _v[1];
|
|
||||||
_v[0] = _v[1]*p._v[2] - _v[2]*p._v[1];
|
|
||||||
_v[1] = _v[2]*p._v[0] - t0 *p._v[2];
|
|
||||||
_v[2] = t0 *p._v[1] - t1 *p._v[0];
|
|
||||||
return *this;
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
|
|
||||||
inline Point3 & operator += ( Point3 const & p)
|
inline Point3 & operator += ( Point3 const & p)
|
||||||
{
|
{
|
||||||
_v[0] += p._v[0];
|
_v[0] += p._v[0];
|
||||||
|
@ -519,26 +459,3 @@ typedef Point3<double> Point3d;
|
||||||
} // end namespace
|
} // end namespace
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef __GL_H__
|
|
||||||
#ifndef __VCG_GL__
|
|
||||||
#define __VCG_GL__
|
|
||||||
namespace vcg{
|
|
||||||
inline void glVertex(Point3<int> const & p) { glVertex3iv(p.V());}
|
|
||||||
inline void glVertex(Point3<short> const & p) { glVertex3sv(p.V());}
|
|
||||||
inline void glVertex(Point3<float> const & p) { glVertex3fv(p.V());}
|
|
||||||
inline void glVertex(Point3<double> const & p){ glVertex3dv(p.V());}
|
|
||||||
inline void glNormal(Point3<int> const & p) { glNormal3iv(p.V());}
|
|
||||||
inline void glNormal(Point3<short> const & p) { glNormal3sv(p.V());}
|
|
||||||
inline void glNormal(Point3<float> const & p) { glNormal3fv(p.V());}
|
|
||||||
inline void glNormal(Point3<double> const & p){ glNormal3dv(p.V());}
|
|
||||||
inline void glTexCoord(Point3<int> const & p) { glTexCoord3iv(p.V());}
|
|
||||||
inline void glTexCoord(Point3<short> const & p) { glTexCoord3sv(p.V());}
|
|
||||||
inline void glTexCoord(Point3<float> const & p) { glTexCoord3fv(p.V());}
|
|
||||||
inline void glTexCoord(Point3<double> const & p){ glTexCoord3dv(p.V());}
|
|
||||||
inline void glTranslate(Point3<float> const & p) { glTranslatef(p.x(),p.y(),p.z());}
|
|
||||||
inline void glTranslate(Point3<double> const & p){ glTranslated(p.x(),p.y(),p.z());}
|
|
||||||
inline void glScale(Point3<float> const & p) { glScalef(p.x(),p.y(),p.z());}
|
|
||||||
inline void glScale(Point3<double> const & p){ glScaled(p.x(),p.y(),p.z());}
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
#endif
|
|
Loading…
Reference in New Issue