113 osg::ArgumentParser arguments(&argc, argv);
117 osgViewer::Viewer* viewer =
new osgViewer::Viewer(arguments);
119 osg::Camera* camera = viewer->getCamera();
120 osgViewer::Renderer* renderer
121 =
static_cast<osgViewer::Renderer*
>(camera->getRenderer());
122 for (
int i = 0;
i < 2; ++
i) {
123 osgUtil::SceneView* sceneView = renderer->getSceneView(
i);
124 sceneView->setCullVisitor(
new simgear::EffectCullVisitor);
127 osg::StateSet* cameraSS = camera->getOrCreateStateSet();
128 osg::Fog* fog =
new osg::Fog;
129 fog->setMode(osg::Fog::EXP2);
130 fog->setColor(osg::Vec4(1.0, 1.0, 1.0, 1.0));
131 fog->setDensity(.0000001);
132 cameraSS->setAttributeAndModes(fog);
134 viewer->setThreadingModel(osgViewer::Viewer::SingleThreaded);
137 osgGA::KeySwitchMatrixManipulator* keyswitchManipulator;
138 keyswitchManipulator =
new osgGA::KeySwitchMatrixManipulator;
140 keyswitchManipulator->addMatrixManipulator(
'1',
"Trackball",
141 new osgGA::TrackballManipulator);
142 keyswitchManipulator->addMatrixManipulator(
'2',
"Flight",
143 new osgGA::FlightManipulator);
144 keyswitchManipulator->addMatrixManipulator(
'3',
"Drive",
145 new osgGA::DriveManipulator);
146 keyswitchManipulator->addMatrixManipulator(
'4',
"Terrain",
147 new osgGA::TerrainManipulator);
148 viewer->setCameraManipulator(keyswitchManipulator);
151 viewer->addEventHandler(
new osgViewer::HelpHandler);
152 viewer->addEventHandler(
new osgViewer::StatsHandler);
153 viewer->addEventHandler(
new osgGA::StateSetManipulator(viewer->getCamera()->getOrCreateStateSet()) );
156 viewer->addEventHandler(
new osgViewer::LODScaleHandler);
157 viewer->addEventHandler(
new osgViewer::ScreenCaptureHandler);
164 for (
int i = arguments.argc() - 1;
i >= 0; --
i) {
165 if (arguments.isOption(
i)) {
168 dataFiles.insert(dataFiles.begin(), arguments[
i]);
177 globals->set_renderer(fgrenderer);
180 globals->set_fg_home(dataPath);
183 if (arguments.read(
"--fg-scenery", s)) {
184 globals->append_fg_scenery(SGPath::fromLocal8Bit(s.c_str()));
186 if (std::getenv(
"FG_SCENERY")) {
187 globals->append_fg_scenery(SGPath::fromEnv(
"FG_SCENERY"));
190 int configResult =
fgInitConfig(arguments.argc(), arguments.argv(),
false);
197 osgDB::FilePathList filePathList
198 = osgDB::Registry::instance()->getDataFilePathList();
199 filePathList.push_back(
globals->get_fg_root().local8BitStr());
202 for (
unsigned i = 0;
i < path_list.size(); ++
i) {
203 filePathList.push_back(path_list[
i].local8BitStr());
206 globals->set_matlib(
new SGMaterialLib );
207 simgear::SGModelLib::init(
globals->get_fg_root().local8BitStr(),
globals->get_props());
211 SGPath mpath(
globals->get_fg_root() );
212 mpath.append(
fgGetString(
"/sim/rendering/materials-file") );
213 if ( !
globals->get_matlib()->load(
globals->get_fg_root().local8BitStr(),
214 mpath.local8BitStr(),
216 throw sg_io_exception(
"Error loading materials file", mpath);
220 osgDB::Registry::instance()->getDataFilePathList() = filePathList;
222 simgear::SGReaderWriterOptions*
options =
new simgear::SGReaderWriterOptions;
223 options->getDatabasePathList() = filePathList;
226 options->setPluginStringData(
"SimGear::PREVIEW",
"ON");
240 SGTimeStamp::sleepForMSec(1000);
241 std::cerr <<
"." << std::flush;
247 osg::ref_ptr<osg::Node> loadedModel;
248 loadedModel = osgDB::readNodeFiles(dataFiles,
options);
251 if (!loadedModel.valid()) {
252 std::cerr << arguments.getApplicationName()
253 <<
": No data loaded" << std::endl;
258 viewer->setSceneData(loadedModel.get());
260 int result = viewer->run();
264 osgDB::Registry::instance()->clearObjectCache();