2003-10-28 00:07:21 +08:00
/* -*-c++-*- OpenSceneGraph - Copyright (C) 1998-2003 Robert Osfield
*
* This application is open source and may be redistributed and / or modified
* freely and without restriction , both in commericial and non commericial applications ,
* as long as this copyright notice is maintained .
*
* This application is distributed in the hope that it will be useful ,
* but WITHOUT ANY WARRANTY ; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE .
*/
# include <osg/Texture2D>
# include <osg/Geometry>
# include <osg/State>
# include <osg/ShapeDrawable>
# include <osgDB/ReadFile>
# include <osgDB/WriteFile>
# include <osgDB/ImageOptions>
# include <osgDB/FileNameUtils>
# include <osgUtil/Optimizer>
# include <osgUtil/TriStripVisitor>
# include <osgUtil/SmoothingVisitor>
# include <osgUtil/TangentSpaceGenerator>
# include <osgFX/BumpMapping>
# include <osgProducer/Viewer>
2003-11-25 19:40:10 +08:00
# include "DataSet.h"
2003-10-28 00:07:21 +08:00
2003-11-25 19:40:10 +08:00
# include <osg/Switch>
2003-10-28 00:07:21 +08:00
2003-11-25 19:40:10 +08:00
int main ( int argc , char * * argv )
2003-10-28 00:07:21 +08:00
{
2003-11-25 19:40:10 +08:00
// use an ArgumentParser object to manage the program arguments.
osg : : ArgumentParser arguments ( & argc , argv ) ;
2003-10-28 00:07:21 +08:00
2003-11-25 19:40:10 +08:00
// set up the usage document, in case we need to print out how to use this program.
arguments . getApplicationUsage ( ) - > setApplicationName ( arguments . getApplicationName ( ) ) ;
arguments . getApplicationUsage ( ) - > setDescription ( arguments . getApplicationName ( ) + " is the standard OpenSceneGraph example which loads and visualises 3d models. " ) ;
arguments . getApplicationUsage ( ) - > setCommandLineUsage ( arguments . getApplicationName ( ) + " [options] filename ... " ) ;
arguments . getApplicationUsage ( ) - > addCommandLineOption ( " -d <filename> " , " Specify the digital elevation map input file to process " ) ;
arguments . getApplicationUsage ( ) - > addCommandLineOption ( " -t <filename> " , " Specify the texture map input file to process " ) ;
arguments . getApplicationUsage ( ) - > addCommandLineOption ( " -m <filename> " , " Specify the 3D database model input file to process " ) ;
arguments . getApplicationUsage ( ) - > addCommandLineOption ( " -o <outputfile> " , " Specify the output master file to generate " ) ;
arguments . getApplicationUsage ( ) - > addCommandLineOption ( " -l <numOfLevels> " , " Specify the number of PagedLOD levels to generate " ) ;
arguments . getApplicationUsage ( ) - > addCommandLineOption ( " -e <x> <y> <w> <h> " , " Extents of the model to generate " ) ;
arguments . getApplicationUsage ( ) - > addCommandLineOption ( " -h or --help " , " Display this information " ) ;
2003-10-28 00:07:21 +08:00
2003-11-25 19:40:10 +08:00
if ( arguments . argc ( ) < = 1 )
2003-10-28 00:07:21 +08:00
{
2003-11-25 19:40:10 +08:00
arguments . getApplicationUsage ( ) - > write ( std : : cout , osg : : ApplicationUsage : : COMMAND_LINE_OPTION ) ;
return 1 ;
2003-10-28 00:07:21 +08:00
}
2003-11-25 19:40:10 +08:00
// create DataSet.
osg : : ref_ptr < DataSet > dataset = new DataSet ;
2003-10-28 00:07:21 +08:00
2003-11-25 19:40:10 +08:00
std : : string filename ;
while ( arguments . read ( " -d " , filename ) )
2003-10-28 00:07:21 +08:00
{
2003-11-25 19:40:10 +08:00
if ( ! filename . empty ( ) ) dataset - > addSource ( new DataSet : : Source ( DataSet : : Source : : HEIGHT_FIELD , filename ) ) ;
2003-10-28 00:07:21 +08:00
}
2003-11-25 19:40:10 +08:00
while ( arguments . read ( " -t " , filename ) )
2003-10-28 00:07:21 +08:00
{
2003-11-25 19:40:10 +08:00
if ( ! filename . empty ( ) ) dataset - > addSource ( new DataSet : : Source ( DataSet : : Source : : IMAGE , filename ) ) ;
2003-10-28 00:07:21 +08:00
}
2003-11-25 19:40:10 +08:00
while ( arguments . read ( " -m " , filename ) )
2003-10-28 00:07:21 +08:00
{
2003-11-25 19:40:10 +08:00
if ( ! filename . empty ( ) ) dataset - > addSource ( new DataSet : : Source ( DataSet : : Source : : MODEL , filename ) ) ;
2003-10-28 00:07:21 +08:00
}
2003-11-25 19:40:10 +08:00
float x , y , w , h ;
while ( arguments . read ( " -e " , x , y , w , h ) )
2003-10-28 00:07:21 +08:00
{
2003-11-25 19:40:10 +08:00
dataset - > setDestinationExtents ( osg : : BoundingBox ( x , y , 0.0f , x + w , y + h , 0.0f ) ) ;
2003-10-28 00:07:21 +08:00
}
2003-11-25 19:40:10 +08:00
dataset - > setDestinationTileBaseName ( " output " ) ;
dataset - > setDestinationTileExtension ( " .ive " ) ;
2003-10-28 00:07:21 +08:00
2003-11-25 19:40:10 +08:00
std : : string outputFileName ( " output.ive " ) ;
while ( arguments . read ( " -o " , outputFileName ) )
2003-10-28 00:07:21 +08:00
{
2003-11-25 19:40:10 +08:00
std : : string path = osgDB : : getFilePath ( outputFileName ) ;
std : : string base = path . empty ( ) ? osgDB : : getStrippedName ( outputFileName ) :
path + ' / ' + osgDB : : getStrippedName ( outputFileName ) ;
std : : string extension = ' . ' + osgDB : : getLowerCaseFileExtension ( outputFileName ) ;
2003-10-28 00:07:21 +08:00
2003-11-25 19:40:10 +08:00
dataset - > setDestinationTileBaseName ( base ) ;
dataset - > setDestinationTileExtension ( extension ) ;
2003-10-28 00:07:21 +08:00
}
float numLevels ;
while ( arguments . read ( " -l " , numLevels ) ) { }
2003-11-25 19:40:10 +08:00
float verticalScale ;
while ( arguments . read ( " -v " , verticalScale ) ) { }
2003-10-28 00:07:21 +08:00
2003-10-29 19:11:17 +08:00
2003-10-28 00:07:21 +08:00
// if user request help write it out to cout.
if ( arguments . read ( " -h " ) | | arguments . read ( " --help " ) )
{
arguments . getApplicationUsage ( ) - > write ( std : : cout ) ;
return 1 ;
}
// any option left unread are converted into errors to write out later.
arguments . reportRemainingOptionsAsUnrecognized ( ) ;
// report any errors if they have occured when parsing the program aguments.
if ( arguments . errors ( ) )
{
arguments . writeErrorMessages ( std : : cout ) ;
return 1 ;
}
2003-11-25 19:40:10 +08:00
dataset - > loadSources ( ) ;
2003-10-28 00:07:21 +08:00
2003-11-25 19:40:10 +08:00
dataset - > createDestination ( ) ;
dataset - > writeDestination ( outputFileName ) ;
2003-10-28 00:07:21 +08:00
return 0 ;
}