Index: ConvexDecomposition/vlookup.cpp =================================================================== --- ConvexDecomposition/vlookup.cpp (revision 8299) +++ ConvexDecomposition/vlookup.cpp (working copy) @@ -164,7 +164,7 @@ }; -template class VertexLess +template class VertexLess { public: typedef std::vector< Type > VertexVector; @@ -188,7 +188,7 @@ static VertexVector *mList; }; -template class VertexPool +template class VertexPool { public: typedef std::set > VertexSet; @@ -197,7 +197,7 @@ int GetVertex(const Type& vtx) { VertexLess::SetSearch(vtx,&mVtxs); - VertexSet::iterator found; + typename VertexSet::iterator found; found = mVertSet.find( -1 ); if ( found != mVertSet.end() ) { @@ -254,10 +254,10 @@ VertexVector mVtxs; // set of vertices. }; +double tmpp[3] = {0,0,0}; +template<> VertexPosition VertexLess::mFind = tmpp; +template<> std::vector *VertexLess::mList =0; -VertexPosition VertexLess::mFind; -std::vector *VertexLess::mList=0; - enum RDIFF { RD_EQUAL, @@ -288,6 +288,7 @@ } +template<> bool VertexLess::operator()(int v1,int v2) const { bool ret = false; Index: ConvexDecomposition/ConvexDecomposition.cpp =================================================================== --- ConvexDecomposition/ConvexDecomposition.cpp (revision 8299) +++ ConvexDecomposition/ConvexDecomposition.cpp (working copy) @@ -66,7 +66,7 @@ #include "cd_vector.h" #include "cd_hull.h" #include "bestfit.h" -#include "PlaneTri.h" +#include "planetri.h" #include "vlookup.h" #include "splitplane.h" #include "meshvolume.h" @@ -760,3 +760,3 @@ - assert( fcount >= 3 && fcount <= 4); - assert( bcount >= 3 && bcount <= 4); - + if ( fcount >= 3 && fcount <= 4) + if ( bcount >= 3 && bcount <= 4) + { @@ -777,1 +777,1 @@ - + } Index: ConvexDecomposition/splitplane.cpp =================================================================== --- ConvexDecomposition/splitplane.cpp (revision 8299) +++ ConvexDecomposition/splitplane.cpp (working copy) @@ -67,7 +67,7 @@ #include "cd_hull.h" #include "cd_wavefront.h" #include "bestfit.h" -#include "PlaneTri.h" +#include "planetri.h" #include "vlookup.h" #include "meshvolume.h" #include "bestfitobb.h" Index: ConvexDecomposition/cd_vector.h =================================================================== --- ConvexDecomposition/cd_vector.h (revision 8299) +++ ConvexDecomposition/cd_vector.h (working copy) @@ -309,12 +309,12 @@ Type FastMagnitude(void) const { - return Type(fast_sqrt(x * x + y * y + z * z)); + return Type(sqrt(x * x + y * y + z * z)); }; Type FasterMagnitude(void) const { - return Type(faster_sqrt(x * x + y * y + z * z)); + return Type(sqrt(x * x + y * y + z * z)); }; void Lerp(const Vector3d& from,const Vector3d& to,double slerp) @@ -436,13 +436,13 @@ Type FastLength(void) const // length of vector. { - return Type(fast_sqrt( x*x + y*y + z*z )); + return Type(sqrt( x*x + y*y + z*z )); }; Type FasterLength(void) const // length of vector. { - return Type(faster_sqrt( x*x + y*y + z*z )); + return Type(sqrt( x*x + y*y + z*z )); }; Type Length2(void) const // squared distance, prior to square root. @@ -518,7 +518,7 @@ inline double FastNormalize(void) // normalize to a unit vector, returns distance. { - double d = fast_sqrt( static_cast< double >( x*x + y*y + z*z ) ); + double d = sqrt( static_cast< double >( x*x + y*y + z*z ) ); if ( d > 0 ) { double r = 1.0f / d; @@ -535,7 +535,7 @@ inline double FasterNormalize(void) // normalize to a unit vector, returns distance. { - double d = faster_sqrt( static_cast< double >( x*x + y*y + z*z ) ); + double d = sqrt( static_cast< double >( x*x + y*y + z*z ) ); if ( d > 0 ) { double r = 1.0f / d; @@ -1029,7 +1029,8 @@ void Zero(void) { - x = y = z = 0; + x = 0; + y = 0; }; Vector2d negative(void) const @@ -1047,12 +1048,12 @@ Type fastmagnitude(void) const { - return (Type) fast_sqrt(x * x + y * y ); + return (Type) sqrt(x * x + y * y ); } Type fastermagnitude(void) const { - return (Type) faster_sqrt( x * x + y * y ); + return (Type) sqrt( x * x + y * y ); } void Reflection(Vector2d &a,Vector2d &b); // compute reflection vector. @@ -1064,12 +1065,12 @@ Type FastLength(void) const // length of vector. { - return Type(fast_sqrt( x*x + y*y )); + return Type(sqrt( x*x + y*y )); }; Type FasterLength(void) const // length of vector. { - return Type(faster_sqrt( x*x + y*y )); + return Type(sqrt( x*x + y*y )); }; Type Length2(void) // squared distance, prior to square root. @@ -1090,7 +1091,7 @@ Type dx = a.x - x; Type dy = a.y - y; Type d = dx*dx+dy*dy; - return fast_sqrt(d); + return sqrt(d); }; Type FasterDistance(const Vector2d &a) const // distance between two points. @@ -1098,7 +1099,7 @@ Type dx = a.x - x; Type dy = a.y - y; Type d = dx*dx+dy*dy; - return faster_sqrt(d); + return sqrt(d); }; Type Distance2(Vector2d &a) // squared distance. Index: ConvexDecomposition/float_math.cpp =================================================================== --- ConvexDecomposition/float_math.cpp (revision 8299) +++ ConvexDecomposition/float_math.cpp (working copy) @@ -212,8 +212,14 @@ matrix[1*4+2] = 2 * ( yz + wx ); matrix[2*4+2] = 1 - 2 * ( xx + yy ); - matrix[3*4+0] =(double) matrix[3*4+1] = matrix[3*4+2] = 0.0f; - matrix[0*4+3] =(double) matrix[1*4+3] = matrix[2*4+3] = 0.0f; + matrix[3*4+0] = 0.0f; + matrix[3*4+1] = 0.0f; + matrix[3*4+2] = 0.0f; + + matrix[0*4+3] = 0.0f; + matrix[1*4+3] = 0.0f; + matrix[2*4+3] = 0.0f; + matrix[3*4+3] =(double) 1.0f; } Index: ConvexDecomposition/cd_wavefront.cpp =================================================================== --- ConvexDecomposition/cd_wavefront.cpp (revision 8299) +++ ConvexDecomposition/cd_wavefront.cpp (working copy) @@ -672,7 +672,7 @@ const char *foo = argv[0]; if ( *foo != '#' ) { - if ( stricmp(argv[0],"v") == 0 && argc == 4 ) + if ( strcmp(argv[0],"v") == 0 && argc == 4 ) { double vx = (double) atof( argv[1] ); double vy = (double) atof( argv[2] ); @@ -681,14 +681,14 @@ mVerts.push_back(vy); mVerts.push_back(vz); } - else if ( stricmp(argv[0],"vt") == 0 && argc == 3 ) + else if ( strcmp(argv[0],"vt") == 0 && argc == 3 ) { double tx = (double) atof( argv[1] ); double ty = (double) atof( argv[2] ); mTexels.push_back(tx); mTexels.push_back(ty); } - else if ( stricmp(argv[0],"vn") == 0 && argc == 4 ) + else if ( strcmp(argv[0],"vn") == 0 && argc == 4 ) { double normalx = (double) atof(argv[1]); double normaly = (double) atof(argv[2]); @@ -697,7 +697,7 @@ mNormals.push_back(normaly); mNormals.push_back(normalz); } - else if ( stricmp(argv[0],"f") == 0 && argc >= 4 ) + else if ( strcmp(argv[0],"f") == 0 && argc >= 4 ) { GeometryVertex v[32]; Index: Makefile =================================================================== --- Makefile (revision 0) +++ Makefile (revision 8581) @@ -0,0 +1,93 @@ + + +OBJS = DecomposeSample.o \ + ConvexDecomposition/bestfit.o ConvexDecomposition/float_math.o \ + ConvexDecomposition/bestfitobb.o ConvexDecomposition/meshvolume.o \ + ConvexDecomposition/cd_hull.o ConvexDecomposition/planetri.o \ + ConvexDecomposition/cd_wavefront.o ConvexDecomposition/raytri.o \ + ConvexDecomposition/concavity.o ConvexDecomposition/splitplane.o \ + ConvexDecomposition/ConvexDecomposition.o ConvexDecomposition/triangulate.o \ + ConvexDecomposition/fitsphere.o ConvexDecomposition/vlookup.o + +HEADERS = \ + ConvexDecomposition/bestfit.h \ + ConvexDecomposition/bestfitobb.h \ + ConvexDecomposition/cd_hull.h \ + ConvexDecomposition/cd_vector.h \ + ConvexDecomposition/cd_wavefront.h \ + ConvexDecomposition/concavity.h \ + ConvexDecomposition/ConvexDecomposition.h \ + ConvexDecomposition/fitsphere.h \ + ConvexDecomposition/float_math.h \ + ConvexDecomposition/meshvolume.h \ + ConvexDecomposition/planetri.h \ + ConvexDecomposition/raytri.h \ + ConvexDecomposition/splitplane.h \ + ConvexDecomposition/triangulate.h \ + ConvexDecomposition/vlookup.h + +CC = g++ + +DEBUG = -ggdb + +CFLAGS = -IConvexDecomposition -Wall -c $(DEBUG) + +LFLAGS = $(DEBUG) + +convex_decomposition: $(OBJS) + $(CC) $(LFLAGS) $(OBJS) -o convex_decomposition + +DecomposeSample.o: DecomposeSample.cpp + $(CC) $(CFLAGS) DecomposeSample.cpp -o $@ + +ConvexDecomposition/bestfit.o: ConvexDecomposition/bestfit.cpp + $(CC) $(CFLAGS) ConvexDecomposition/bestfit.cpp -o $@ + +ConvexDecomposition/bestfitobb.o: ConvexDecomposition/bestfitobb.cpp + $(CC) $(CFLAGS) ConvexDecomposition/bestfitobb.cpp -o $@ + +ConvexDecomposition/cd_hull.o: ConvexDecomposition/cd_hull.cpp + $(CC) $(CFLAGS) ConvexDecomposition/cd_hull.cpp -o $@ + +ConvexDecomposition/cd_wavefront.o: ConvexDecomposition/cd_wavefront.cpp + $(CC) $(CFLAGS) ConvexDecomposition/cd_wavefront.cpp -o $@ + +ConvexDecomposition/concavity.o: ConvexDecomposition/concavity.cpp + $(CC) $(CFLAGS) ConvexDecomposition/concavity.cpp -o $@ + +ConvexDecomposition/ConvexDecomposition.o: ConvexDecomposition/ConvexDecomposition.cpp + $(CC) $(CFLAGS) ConvexDecomposition/ConvexDecomposition.cpp -o $@ + +ConvexDecomposition/fitsphere.o: ConvexDecomposition/fitsphere.cpp + $(CC) $(CFLAGS) ConvexDecomposition/fitsphere.cpp -o $@ + +ConvexDecomposition/float_math.o: ConvexDecomposition/float_math.cpp + $(CC) $(CFLAGS) ConvexDecomposition/float_math.cpp -o $@ + +ConvexDecomposition/meshvolume.o: ConvexDecomposition/meshvolume.cpp + $(CC) $(CFLAGS) ConvexDecomposition/meshvolume.cpp -o $@ + +ConvexDecomposition/planetri.o: ConvexDecomposition/planetri.cpp + $(CC) $(CFLAGS) ConvexDecomposition/planetri.cpp -o $@ + +ConvexDecomposition/raytri.o: ConvexDecomposition/raytri.cpp + $(CC) $(CFLAGS) ConvexDecomposition/raytri.cpp -o $@ + +ConvexDecomposition/splitplane.o: ConvexDecomposition/splitplane.cpp + $(CC) $(CFLAGS) ConvexDecomposition/splitplane.cpp -o $@ + +ConvexDecomposition/triangulate.o: ConvexDecomposition/triangulate.cpp + $(CC) $(CFLAGS) ConvexDecomposition/triangulate.cpp -o $@ + +ConvexDecomposition/vlookup.o: ConvexDecomposition/vlookup.cpp ConvexDecomposition/vlookup.cpp + $(CC) $(CFLAGS) ConvexDecomposition/vlookup.cpp -o $@ + +install: + cp convex_decomposition ../../convex_decomposition/bin/ + +clean: + \rm *.o */*.o convex_decomposition + +tar: + tar cfv ConvexDecomposition.tar DecomposeSample.cpp convex_decomposition Makefile \ + ConvexDecomposition Index: DecomposeSample.cpp =================================================================== --- DecomposeSample.cpp (revision 8299) +++ DecomposeSample.cpp (working copy) @@ -6,7 +6,7 @@ #include -#include "./ConvexDecomposition/convexdecomposition.h" +#include "./ConvexDecomposition/ConvexDecomposition.h" #include "./ConvexDecomposition/cd_wavefront.h" using namespace ConvexDecomposition; @@ -227,7 +227,7 @@ if ( fph ) { - printf("Saving convex decomposition of %d hulls to COLLADA file '%s'\r\n", mHulls.size(), scratch ); + printf("Saving convex decomposition of %d hulls to COLLADA file '%s'\r\n", (int)mHulls.size(), scratch ); fprintf(fph,"\r\n"); fprintf(fph,"\r\n"); @@ -537,7 +537,7 @@ }; -void main(int argc,const char **argv) +int main(int argc,const char **argv) { if ( argc < 2 ) { Index: DecomposeSample.cpp =================================================================== --- DecomposeSample.cpp (revision 8299) +++ DecomposeSample.cpp (working copy) @@ -67,3 +67,3 @@ strcpy(mBaseName,fname); - char *dot = strstr(mBaseName,"."); + char *dot = strstr(mBaseName,".obj"); if ( dot ) *dot = 0; Index: ConvexDecomposition/cd_wavefront.cpp =================================================================== --- ConvexDecomposition/cd_wavefront.cpp (revision 8299) +++ ConvexDecomposition/cd_wavefront.cpp (working copy) @@ -573,6 +573,7 @@ FloatVector mNormals; GeometryInterface *mCallback; + friend class WavefrontObj; }; @@ -839,7 +840,17 @@ memcpy(mIndices, &indices[0], sizeof(int)*mTriCount*3); ret = mTriCount; } - + else if( obj.mVerts.size() > 0 ) { + // take consecutive vertices + mVertexCount = obj.mVerts.size()/3; + mVertices = new double[mVertexCount*3]; + memcpy( mVertices, &obj.mVerts[0], sizeof(double)*mVertexCount*3 ); + mTriCount = mVertexCount/3; + mIndices = new int[mTriCount*3*sizeof(int)]; + for(int i = 0; i < mVertexCount; ++i) + mIndices[i] = i; + ret = mTriCount; + } return ret; }