]> git.mxchange.org Git - flightgear.git/commitdiff
Removed support of old Ascii scenery format. The loader had not been
authorcurt <curt>
Tue, 6 May 2003 14:20:30 +0000 (14:20 +0000)
committercurt <curt>
Tue, 6 May 2003 14:20:30 +0000 (14:20 +0000)
maintianed or upgraded in a *long* time so it didn't support many new
features like the runway lighting.  If anyone was using it for anything,
it should not be a huge amount of work to switch to the binary format.
SimGear includes a reader and writer for the binary format.

src/Objects/obj.cxx
src/Objects/obj.hxx
src/Scenery/tileentry.cxx

index 8fda04db2f587e9627afe9180c6adaa2da5dd674..ebdda8144d4c2ff7c22af47cafe17ace49832698 100644 (file)
@@ -1,4 +1,5 @@
-// obj.cxx -- routines to handle "sorta" WaveFront .obj format files.
+// obj.hxx -- routines to handle loading scenery and building the plib
+//            scene graph.
 //
 // Written by Curtis Olson, started October 1997.
 //
@@ -71,9 +72,6 @@ typedef int_list::iterator int_list_iterator;
 typedef int_list::const_iterator int_point_list_iterator;
 
 
-static double normals[FG_MAX_NODES][3];
-static double tex_coords[FG_MAX_NODES*3][3];
-
 // not used because plib branches don't honor call backs.
 static int
 runway_lights_pretrav (ssgEntity * e, int mask)
@@ -85,44 +83,6 @@ runway_lights_pretrav (ssgEntity * e, int mask)
 }
 
 
-#define FG_TEX_CONSTANT 69.0
-
-// Calculate texture coordinates for a given point.
-static Point3D local_calc_tex_coords(const Point3D& node, const Point3D& ref) {
-    Point3D cp;
-    Point3D pp;
-    // double tmplon, tmplat;
-
-    // cout << "-> " << node[0] << " " << node[1] << " " << node[2] << endl;
-    // cout << "-> " << ref.x() << " " << ref.y() << " " << ref.z() << endl;
-
-    cp = Point3D( node[0] + ref.x(),
-                  node[1] + ref.y(),
-                  node[2] + ref.z() );
-
-    pp = sgCartToPolar3d(cp);
-
-    // tmplon = pp.lon() * SGD_RADIANS_TO_DEGREES;
-    // tmplat = pp.lat() * SGD_RADIANS_TO_DEGREES;
-    // cout << tmplon << " " << tmplat << endl;
-
-    pp.setx( fmod(SGD_RADIANS_TO_DEGREES * FG_TEX_CONSTANT * pp.x(), 11.0) );
-    pp.sety( fmod(SGD_RADIANS_TO_DEGREES * FG_TEX_CONSTANT * pp.y(), 11.0) );
-
-    if ( pp.x() < 0.0 ) {
-        pp.setx( pp.x() + 11.0 );
-    }
-
-    if ( pp.y() < 0.0 ) {
-        pp.sety( pp.y() + 11.0 );
-    }
-
-    // cout << pp << endl;
-
-    return(pp);
-}
-
-
 // Generate an ocean tile
 bool fgGenTile( const string& path, SGBucket b,
                       Point3D *center,
@@ -766,451 +726,6 @@ gen_random_surface_objects (ssgLeaf *leaf,
 // Scenery loaders.
 ////////////////////////////////////////////////////////////////////////
 
-
-// Load an Ascii obj file
-ssgBranch *fgAsciiObjLoad( const string& path, FGTileEntry *t,
-                           ssgVertexArray *lights, const bool is_base)
-{
-    FGNewMat *newmat = NULL;
-    string material;
-    float coverage = -1;
-    Point3D pp;
-    // sgVec3 approx_normal;
-    // double normal[3], scale = 0.0;
-    // double x, y, z, xmax, xmin, ymax, ymin, zmax, zmin;
-    // GLfloat sgenparams[] = { 1.0, 0.0, 0.0, 0.0 };
-    // GLint display_list = 0;
-    int shading;
-    bool in_faces = false;
-    int vncount, vtcount;
-    int n1 = 0, n2 = 0, n3 = 0;
-    int tex;
-    // int last1 = 0, last2 = 0;
-    bool odd = false;
-    point_list nodes;
-    Point3D node;
-    Point3D center;
-    double scenery_version = 0.0;
-    double tex_width = 1000.0, tex_height = 1000.0;
-    bool shared_done = false;
-    int_list fan_vertices;
-    int_list fan_tex_coords;
-    int i;
-    ssgSimpleState *state = NULL;
-    sgVec3 *vtlist, *vnlist;
-    sgVec2 *tclist;
-
-    ssgBranch *tile = new ssgBranch () ;
-
-    tile -> setName ( (char *)path.c_str() ) ;
-
-    // Attempt to open "path.gz" or "path"
-    sg_gzifstream in( path );
-    if ( ! in.is_open() ) {
-        SG_LOG( SG_TERRAIN, SG_DEBUG, "Cannot open file: " << path );
-        SG_LOG( SG_TERRAIN, SG_DEBUG, "default to ocean tile: " << path );
-
-        delete tile;
-
-        return NULL;
-    }
-
-    shading = fgGetBool("/sim/rendering/shading");
-
-    if ( is_base ) {
-        t->ncount = 0;
-    }
-    vncount = 0;
-    vtcount = 0;
-    if ( is_base ) {
-        t->bounding_radius = 0.0;
-    }
-    center = t->center;
-
-    // StopWatch stopwatch;
-    // stopwatch.start();
-
-    // ignore initial comments and blank lines. (priming the pump)
-    // in >> skipcomment;
-    // string line;
-
-    string token;
-    char c;
-
-#ifdef __MWERKS__
-    while ( in.get(c) && c  != '\0' ) {
-        in.putback(c);
-#else
-    while ( ! in.eof() ) {
-#endif
-        in >> ::skipws;
-
-        if ( in.get( c ) && c == '#' ) {
-            // process a comment line
-
-            // getline( in, line );
-            // cout << "comment = " << line << endl;
-
-            in >> token;
-
-            if ( token == "Version" ) {
-                // read scenery versions number
-                in >> scenery_version;
-                // cout << "scenery_version = " << scenery_version << endl;
-                if ( scenery_version > 0.4 ) {
-                    SG_LOG( SG_TERRAIN, SG_ALERT, 
-                            "\nYou are attempting to load a tile format that\n"
-                            << "is newer than this version of flightgear can\n"
-                            << "handle.  You should upgrade your copy of\n"
-                            << "FlightGear to the newest version.  For\n"
-                            << "details, please see:\n"
-                            << "\n    http://www.flightgear.org\n" );
-                    exit(-1);
-                }
-            } else if ( token == "gbs" ) {
-                // reference point (center offset)
-                if ( is_base ) {
-                    in >> t->center >> t->bounding_radius;
-                } else {
-                    Point3D junk1;
-                    double junk2;
-                    in >> junk1 >> junk2;
-                }
-                center = t->center;
-                // cout << "center = " << center 
-                //      << " radius = " << t->bounding_radius << endl;
-            } else if ( token == "bs" ) {
-                // reference point (center offset)
-                // (skip past this)
-                Point3D junk1;
-                double junk2;
-                in >> junk1 >> junk2;
-            } else if ( token == "usemtl" ) {
-                // material property specification
-
-                // if first usemtl with shared_done = false, then set
-                // shared_done true and build the ssg shared lists
-                if ( ! shared_done ) {
-                    // sanity check
-                    if ( (int)nodes.size() != vncount ) {
-                        SG_LOG( SG_TERRAIN, SG_ALERT, 
-                                "Tile has mismatched nodes = " << nodes.size()
-                                << " and normals = " << vncount << " : " 
-                                << path );
-                        // exit(-1);
-                    }
-                    shared_done = true;
-
-                    vtlist = new sgVec3 [ nodes.size() ];
-                    t->vec3_ptrs.push_back( vtlist );
-                    vnlist = new sgVec3 [ vncount ];
-                    t->vec3_ptrs.push_back( vnlist );
-                    tclist = new sgVec2 [ vtcount ];
-                    t->vec2_ptrs.push_back( tclist );
-
-                    for ( i = 0; i < (int)nodes.size(); ++i ) {
-                        sgSetVec3( vtlist[i], 
-                                   nodes[i][0], nodes[i][1], nodes[i][2] );
-                    }
-                    for ( i = 0; i < vncount; ++i ) {
-                        sgSetVec3( vnlist[i], 
-                                   normals[i][0], 
-                                   normals[i][1],
-                                   normals[i][2] );
-                    }
-                    for ( i = 0; i < vtcount; ++i ) {
-                        sgSetVec2( tclist[i],
-                                   tex_coords[i][0],
-                                   tex_coords[i][1] );
-                    }
-                }
-
-                // display_list = xglGenLists(1);
-                // xglNewList(display_list, GL_COMPILE);
-                // printf("xglGenLists(); xglNewList();\n");
-                in_faces = false;
-
-                // scan the material line
-                in >> material;
-                
-                // find this material in the properties list
-
-                newmat = material_lib.find( material );
-                if ( newmat == NULL ) {
-                    // see if this is an on the fly texture
-                    string file = path;
-                    int pos = file.rfind( "/" );
-                    file = file.substr( 0, pos );
-                    // cout << "current file = " << file << endl;
-                    file += "/";
-                    file += material;
-                    // cout << "current file = " << file << endl;
-                    if ( ! material_lib.add_item( file ) ) {
-                        SG_LOG( SG_TERRAIN, SG_ALERT, 
-                                "Ack! unknown usemtl name = " << material 
-                                << " in " << path );
-                    } else {
-                        // locate our newly created material
-                        newmat = material_lib.find( material );
-                        if ( newmat == NULL ) {
-                            SG_LOG( SG_TERRAIN, SG_ALERT, 
-                                    "Ack! bad on the fly materia create = "
-                                    << material << " in " << path );
-                        }
-                    }
-                }
-
-                if ( newmat != NULL ) {
-                    // set the texture width and height values for this
-                    // material
-                    tex_width = newmat->get_xsize();
-                    tex_height = newmat->get_ysize();
-                    state = newmat->get_state();
-                    coverage = newmat->get_light_coverage();
-                    // cout << "(w) = " << tex_width << " (h) = "
-                    //      << tex_width << endl;
-                } else {
-                    coverage = -1;
-                }
-            } else {
-                // unknown comment, just gobble the input until the
-                // end of line
-
-                in >> skipeol;
-            }
-        } else {
-            in.putback( c );
-        
-            in >> token;
-
-            // cout << "token = " << token << endl;
-
-            if ( token == "vn" ) {
-                // vertex normal
-                if ( vncount < FG_MAX_NODES ) {
-                    in >> normals[vncount][0]
-                       >> normals[vncount][1]
-                       >> normals[vncount][2];
-                    vncount++;
-                } else {
-                    SG_LOG( SG_TERRAIN, SG_ALERT, 
-                            "Read too many vertex normals in " << path 
-                            << " ... dying :-(" );
-                    exit(-1);
-                }
-            } else if ( token == "vt" ) {
-                // vertex texture coordinate
-                if ( vtcount < FG_MAX_NODES*3 ) {
-                    in >> tex_coords[vtcount][0]
-                       >> tex_coords[vtcount][1];
-                    vtcount++;
-                } else {
-                    SG_LOG( SG_TERRAIN, SG_ALERT, 
-                            "Read too many vertex texture coords in " << path
-                            << " ... dying :-("
-                            );
-                    exit(-1);
-                }
-            } else if ( token == "v" ) {
-                // node (vertex)
-                if ( t->ncount < FG_MAX_NODES ) {
-                    /* in >> nodes[t->ncount][0]
-                       >> nodes[t->ncount][1]
-                       >> nodes[t->ncount][2]; */
-                    in >> node;
-                    nodes.push_back(node);
-                    if ( is_base ) {
-                        t->ncount++;
-                    }
-                } else {
-                    SG_LOG( SG_TERRAIN, SG_ALERT, 
-                            "Read too many nodes in " << path 
-                            << " ... dying :-(");
-                    exit(-1);
-                }
-            } else if ( (token == "tf") || (token == "ts") || (token == "f") ) {
-                // triangle fan, strip, or individual face
-                // SG_LOG( SG_TERRAIN, SG_INFO, "new fan or strip");
-
-                fan_vertices.clear();
-                fan_tex_coords.clear();
-                odd = true;
-
-                // xglBegin(GL_TRIANGLE_FAN);
-
-                in >> n1;
-                fan_vertices.push_back( n1 );
-                // xglNormal3dv(normals[n1]);
-                if ( in.get( c ) && c == '/' ) {
-                    in >> tex;
-                    fan_tex_coords.push_back( tex );
-                    if ( scenery_version >= 0.4 ) {
-                        if ( tex_width > 0 ) {
-                            tclist[tex][0] *= (1000.0 / tex_width);
-                        }
-                        if ( tex_height > 0 ) {
-                            tclist[tex][1] *= (1000.0 / tex_height);
-                        }
-                    }
-                    pp.setx( tex_coords[tex][0] * (1000.0 / tex_width) );
-                    pp.sety( tex_coords[tex][1] * (1000.0 / tex_height) );
-                } else {
-                    in.putback( c );
-                    pp = local_calc_tex_coords(nodes[n1], center);
-                }
-                // xglTexCoord2f(pp.x(), pp.y());
-                // xglVertex3dv(nodes[n1].get_n());
-
-                in >> n2;
-                fan_vertices.push_back( n2 );
-                // xglNormal3dv(normals[n2]);
-                if ( in.get( c ) && c == '/' ) {
-                    in >> tex;
-                    fan_tex_coords.push_back( tex );
-                    if ( scenery_version >= 0.4 ) {
-                        if ( tex_width > 0 ) {
-                            tclist[tex][0] *= (1000.0 / tex_width);
-                        }
-                        if ( tex_height > 0 ) {
-                            tclist[tex][1] *= (1000.0 / tex_height);
-                        }
-                    }
-                    pp.setx( tex_coords[tex][0] * (1000.0 / tex_width) );
-                    pp.sety( tex_coords[tex][1] * (1000.0 / tex_height) );
-                } else {
-                    in.putback( c );
-                    pp = local_calc_tex_coords(nodes[n2], center);
-                }
-                // xglTexCoord2f(pp.x(), pp.y());
-                // xglVertex3dv(nodes[n2].get_n());
-                
-                // read all subsequent numbers until next thing isn't a number
-                while ( true ) {
-                    in >> ::skipws;
-
-                    char c;
-                    in.get(c);
-                    in.putback(c);
-                    if ( ! isdigit(c) || in.eof() ) {
-                        break;
-                    }
-
-                    in >> n3;
-                    fan_vertices.push_back( n3 );
-                    // cout << "  triangle = "
-                    //      << n1 << "," << n2 << "," << n3
-                    //      << endl;
-                    // xglNormal3dv(normals[n3]);
-                    if ( in.get( c ) && c == '/' ) {
-                        in >> tex;
-                        fan_tex_coords.push_back( tex );
-                        if ( scenery_version >= 0.4 ) {
-                            if ( tex_width > 0 ) {
-                                tclist[tex][0] *= (1000.0 / tex_width);
-                            }
-                            if ( tex_height > 0 ) {
-                                tclist[tex][1] *= (1000.0 / tex_height);
-                            }
-                        }
-                        pp.setx( tex_coords[tex][0] * (1000.0 / tex_width) );
-                        pp.sety( tex_coords[tex][1] * (1000.0 / tex_height) );
-                    } else {
-                        in.putback( c );
-                        pp = local_calc_tex_coords(nodes[n3], center);
-                    }
-                    // xglTexCoord2f(pp.x(), pp.y());
-                    // xglVertex3dv(nodes[n3].get_n());
-
-                    if ( (token == "tf") || (token == "f") ) {
-                        // triangle fan
-                        n2 = n3;
-                    } else {
-                        // triangle strip
-                        odd = !odd;
-                        n1 = n2;
-                        n2 = n3;
-                    }
-                }
-
-                // xglEnd();
-
-                // build the ssg entity
-                int size = (int)fan_vertices.size();
-                ssgVertexArray   *vl = new ssgVertexArray( size );
-                ssgNormalArray   *nl = new ssgNormalArray( size );
-                ssgTexCoordArray *tl = new ssgTexCoordArray( size );
-                ssgColourArray   *cl = new ssgColourArray( 1 );
-
-                sgVec4 color;
-                sgSetVec4( color, 1.0, 1.0, 1.0, 1.0 );
-                cl->add( color );
-
-                sgVec2 tmp2;
-                sgVec3 tmp3;
-                for ( i = 0; i < size; ++i ) {
-                    sgCopyVec3( tmp3, vtlist[ fan_vertices[i] ] );
-                    vl -> add( tmp3 );
-
-                    sgCopyVec3( tmp3, vnlist[ fan_vertices[i] ] );
-                    nl -> add( tmp3 );
-
-                    sgCopyVec2( tmp2, tclist[ fan_tex_coords[i] ] );
-                    tl -> add( tmp2 );
-                }
-
-                ssgLeaf *leaf = NULL;
-                if ( token == "tf" ) {
-                    // triangle fan
-                    leaf = 
-                        new ssgVtxTable ( GL_TRIANGLE_FAN, vl, nl, tl, cl );
-                } else if ( token == "ts" ) {
-                    // triangle strip
-                    leaf = 
-                        new ssgVtxTable ( GL_TRIANGLE_STRIP, vl, nl, tl, cl );
-                } else if ( token == "f" ) {
-                    // triangle
-                    leaf = 
-                        new ssgVtxTable ( GL_TRIANGLES, vl, nl, tl, cl );
-                }
-                // leaf->makeDList();
-                leaf->setState( state );
-
-                tile->addKid( leaf );
-
-                if ( is_base ) {
-                    if ( coverage > 0.0 ) {
-                        if ( coverage < 10000.0 ) {
-                            SG_LOG(SG_INPUT, SG_ALERT, "Light coverage is "
-                                   << coverage << ", pushing up to 10000");
-                            coverage = 10000;
-                        }
-                        gen_random_surface_points(leaf, lights, coverage);
-                    }
-                }
-            } else {
-                SG_LOG( SG_TERRAIN, SG_WARN, "Unknown token in " 
-                        << path << " = " << token );
-            }
-
-            // eat white space before start of while loop so if we are
-            // done with useful input it is noticed before hand.
-            in >> ::skipws;
-        }
-    }
-
-    if ( is_base ) {
-        t->nodes = nodes;
-    }
-
-    // stopwatch.stop();
-    // SG_LOG( SG_TERRAIN, SG_DEBUG, 
-    //     "Loaded " << path << " in " 
-    //     << stopwatch.elapsedSeconds() << " seconds" );
-
-    return tile;
-}
-
-
 ssgLeaf *gen_leaf( const string& path,
                    const GLenum ty, const string& material,
                    const point_list& nodes, const point_list& normals,
index 195cceabf05cc0092e328d4e9290385cffd6f9c0..eedbd1ff490648dd60d826a8e7976a08594afb58 100644 (file)
@@ -1,4 +1,5 @@
-// obj.hxx -- routines to handle WaveFront .obj-ish format files.
+// obj.hxx -- routines to handle loading scenery and building the plib
+//            scene graph.
 //
 // Written by Curtis Olson, started October 1997.
 //
 
 #include <plib/ssg.h>           // plib include
 
+#include <simgear/bucket/newbucket.hxx>
 #include <simgear/math/sg_types.hxx>
 
-#include <Scenery/tileentry.hxx>
-
 SG_USING_STD(string);
 
 
@@ -60,10 +60,6 @@ bool fgBinObjLoad( const string& path, const bool is_base,
                    ssgBranch* taxi_lights,
                    ssgVertexArray *ground_lights );
 
-// Load an ascii object file
-ssgBranch *fgAsciiObjLoad(const string& path, FGTileEntry *tile,
-                          ssgVertexArray *lights, const bool is_base);
-
 // Generate an ocean tile
 bool fgGenTile( const string& path, SGBucket b,
                 Point3D *center,
index 2df901c2aa8eeeb38e2417a6254db8011a416a40..5882b51655e2c3912d42564b2a46a07a57d6bdcd 100644 (file)
@@ -1137,21 +1137,13 @@ bool FGTileEntry::obj_load( const std::string& path,
             bounding_radius = br;
         }
     } else {
-        // next try the older ascii format, this is some ugly
-        // weirdness because the ascii loader is *old* and hasn't been
-        // updated, but hopefully we can can the ascii format soon.
-        ssgBranch *tmp = fgAsciiObjLoad( path, this, ground_lights, is_base );
-        if ( tmp ) {
-            return (NULL != tmp);
+        // default to an ocean tile
+        if ( fgGenTile( path, tile_bucket, &c, &br, geometry ) ) {
+            center = c;
+            bounding_radius = br;
         } else {
-            // default to an ocean tile
-            if ( fgGenTile( path, tile_bucket, &c, &br, geometry ) ) {
-                center = c;
-                bounding_radius = br;
-            } else {
-                SG_LOG( SG_TERRAIN, SG_ALERT,
-                        "Warning: failed to generate ocean tile!" );
-            }
+            SG_LOG( SG_TERRAIN, SG_ALERT,
+                    "Warning: failed to generate ocean tile!" );
         }
     }