X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=src%2FObjects%2Fobj.cxx;h=4fb53463cdad10dd8d44140f64250677406f6e67;hb=b4a9d7621597c9eef97f8ec84d246d5585b4b7ea;hp=bec98f138e9fd10df4786681894d501944a7f419;hpb=f1b1077d930d542014baf54a328b7a233182647a;p=flightgear.git diff --git a/src/Objects/obj.cxx b/src/Objects/obj.cxx index bec98f138..4fb53463c 100644 --- a/src/Objects/obj.cxx +++ b/src/Objects/obj.cxx @@ -242,37 +242,6 @@ ssgBranch *fgGenTile( const string& path, FGTileEntry *t) { } -#if defined ( PLIB_1_2_X ) -static float fgTriArea( sgVec3 p0, sgVec3 p1, sgVec3 p2 ) { - /* - From comp.graph.algorithms FAQ - 2A(P) = abs(N.(sum_{i=0}^{n-1}(v_i x v_{i+1}))) - */ - sgVec3 sum; - sgZeroVec3( sum ); - - sgVec3 norm; - sgMakeNormal( norm, p0, p1, p2 ); - - float *vv[3]; - vv[0] = p0; - vv[1] = p1; - vv[2] = p2; - - for( int i=0; i<3; i++ ) { - int ii = (i+1) % 3; - sum[0] += (vv[i][1] * vv[ii][2] - vv[i][2] * vv[ii][1]) ; - sum[1] += (vv[i][2] * vv[ii][0] - vv[i][0] * vv[ii][2]) ; - sum[2] += (vv[i][0] * vv[ii][1] - vv[i][1] * vv[ii][0]) ; - } - - return( sgAbs(sgScalarProductVec3( norm, sum )) * SG_HALF ); -} -#else -# define fgTriArea(p0,p1,p2) sgTriArea(p0,p1,p2) -#endif - - static void random_pt_inside_tri( float *res, float *n1, float *n2, float *n3 ) { @@ -305,15 +274,15 @@ static void gen_random_surface_points( ssgLeaf *leaf, ssgVertexArray *lights, // generate a repeatable random seed p1 = leaf->getVertex( 0 ); - unsigned int *seed = (unsigned int *)p1; - sg_srandom( *seed ); + unsigned int seed = (unsigned int)p1[0]; + sg_srandom( seed ); for ( int i = 0; i < num; ++i ) { leaf->getTriangle( i, &n1, &n2, &n3 ); p1 = leaf->getVertex(n1); p2 = leaf->getVertex(n2); p3 = leaf->getVertex(n3); - double area = fgTriArea( p1, p2, p3 ); + double area = sgTriArea( p1, p2, p3 ); double num = area / factor; // generate a light point for each unit of area @@ -338,7 +307,7 @@ static void gen_random_surface_points( ssgLeaf *leaf, ssgVertexArray *lights, // Load an Ascii obj file -static ssgBranch *fgAsciiObjLoad( const string& path, FGTileEntry *t, +ssgBranch *fgAsciiObjLoad( const string& path, FGTileEntry *t, ssgVertexArray *lights, const bool is_base) { FGNewMat *newmat = NULL; @@ -412,11 +381,7 @@ static ssgBranch *fgAsciiObjLoad( const string& path, FGTileEntry *t, while ( ! in.eof() ) { #endif -#if defined( macintosh ) || defined( _MSC_VER ) in >> ::skipws; -#else - in >> skipws; -#endif if ( in.get( c ) && c == '#' ) { // process a comment line @@ -659,11 +624,7 @@ static ssgBranch *fgAsciiObjLoad( const string& path, FGTileEntry *t, // read all subsequent numbers until next thing isn't a number while ( true ) { -#if defined( macintosh ) || defined( _MSC_VER ) in >> ::skipws; -#else - in >> skipws; -#endif char c; in.get(c); @@ -771,11 +732,7 @@ static ssgBranch *fgAsciiObjLoad( const string& path, FGTileEntry *t, // eat white space before start of while loop so if we are // done with useful input it is noticed before hand. -#if defined( macintosh ) || defined( _MSC_VER ) in >> ::skipws; -#else - in >> skipws; -#endif } } @@ -792,13 +749,13 @@ static ssgBranch *fgAsciiObjLoad( const string& path, FGTileEntry *t, } -static ssgLeaf *gen_leaf( const string& path, - const GLenum ty, const string& material, - const point_list& nodes, const point_list& normals, - const point_list& texcoords, - const int_list node_index, - const int_list& tex_index, - const bool calc_lights, ssgVertexArray *lights ) +ssgLeaf *gen_leaf( const string& path, + const GLenum ty, const string& material, + const point_list& nodes, const point_list& normals, + const point_list& texcoords, + const int_list node_index, + const int_list& tex_index, + const bool calc_lights, ssgVertexArray *lights ) { double tex_width = 1000.0, tex_height = 1000.0; ssgSimpleState *state = NULL; @@ -823,7 +780,7 @@ static ssgLeaf *gen_leaf( const string& path, newmat = material_lib.find( material ); if ( newmat == NULL ) { SG_LOG( SG_TERRAIN, SG_ALERT, - "Ack! bad on the fly materia create = " + "Ack! bad on the fly material create = " << material << " in " << path ); } } @@ -842,10 +799,22 @@ static ssgLeaf *gen_leaf( const string& path, coverage = -1; } + // cout << "before list allocs" << endl; + int size = node_index.size(); + + if ( size < 1 ) { + SG_LOG( SG_TERRAIN, SG_ALERT, "Woh! list size < 1" ); + exit(-1); + } + + // cout << "before vl, size = " << size << endl; ssgVertexArray *vl = new ssgVertexArray( size ); + // cout << "before nl" << endl; ssgNormalArray *nl = new ssgNormalArray( size ); + // cout << "before tl" << endl; ssgTexCoordArray *tl = new ssgTexCoordArray( size ); + // cout << "before cl" << endl; ssgColourArray *cl = new ssgColourArray( 1 ); sgVec4 color; @@ -902,8 +871,8 @@ static ssgLeaf *gen_leaf( const string& path, // Load an Binary obj file -static ssgBranch *fgBinObjLoad( const string& path, FGTileEntry *t, - ssgVertexArray *lights, const bool is_base) +ssgBranch *fgBinObjLoad( const string& path, FGTileEntry *t, + ssgVertexArray *lights, const bool is_base) { int i; @@ -984,24 +953,3 @@ static ssgBranch *fgBinObjLoad( const string& path, FGTileEntry *t, return object; } - - -// Load an obj file -ssgBranch *fgObjLoad( const string& path, FGTileEntry *t, - ssgVertexArray *lights, const bool is_base) -{ - ssgBranch *result = NULL; - - // try loading binary format - result = fgBinObjLoad( path, t, lights, is_base ); - if ( result == NULL ) { - // next try the older ascii format - result = fgAsciiObjLoad( path, t, lights, is_base ); - if ( result == NULL ) { - // default to an ocean tile - result = fgGenTile( path, t ); - } - } - - return result; -}