Hi Robert.

I just got stuck on something I been worried about for quite some time
regarding the Math library in osg:

       bool Matrix::isIdentity() const
       {
           return _mat[0][0]==1.0f && _mat[0][1]==0.0f &&
_mat[0][2]==0.0f&&  _mat[0][3]==
0.0f &&
                  _mat[1][0]==0.0f && _mat[1][1]==1.0f &&
_mat[1][2]==0.0f&&  _mat[1][3]==
0.0f &&
                  _mat[2][0]==0.0f && _mat[2][1]==0.0f &&
_mat[2][2]==1.0f&&  _mat[2][3]==
0.0f &&
                  _mat[3][0]==0.0f && _mat[3][1]==0.0f &&
_mat[3][2]==0.0f&&  _mat[3][3]==
1.0f;
       }

Is there a specific reason for not using epsilon tests for a float? I can
think of quite a few situations when this would fail.
I guess, there is only one situation when this would succeed for sure, and
that is after a call to makeIdentity().


This also goes for quite some of the Vec3, Vec4, Quat code too.
All comparisons such as:

inline bool operator == (const Vec3f& v) const { return _v[0]==v._v[0] &&
_v[1]==v._v[1] && _v[2]==v._v[2]; }

Would effectively fail in most situations, as comparing floats directly is
something that is not recomended.


Instead something like the following should be used:


#define EPSILON 1E-16
#define EQUAL(A,B) (abs((A)-(B)) < EPSILON)

inline bool operator == (const Vec3f& v) const { return EQUAL(_v[0]-v._v[0])
&& EQUAL(_v[1]-v._v[1]) && EQUAL(_v[2]-v._v[2]); }'


Comments?



--


________________________________________________________________
Anders Backman               Email:    [EMAIL PROTECTED]
HPC2N/VRlab                  Phone:    +46 (0)90-786 9936
Umea university              Cellular: +46 (0)70-392 64 67
S-901 87 UMEA SWEDEN         Fax:      +46 90-786 6126
                              http://www.cs.umu.se/~andersb
_______________________________________________
osg-users mailing list
[email protected]
http://openscenegraph.net/mailman/listinfo/osg-users
http://www.openscenegraph.org/

Reply via email to