osgEphemeris C++ API
An example of building a viewer which include the osgEphemeris::EphemerisModel
class is provided in the distribution under src/Viewer. In essence, the
osgEphermeris::EphemerisModel is added to the scene graph like any other
osg::Node. osgEphemeris::EphemerisModel is the highest level
class in the osgEphemeris library and provides the highest level interface
for the programmer
The following is main.cpp from the viewer example.
/* -*-c++-*- OpenSceneGraph - Ephemeris Model Copyright (C) 2006 Don Burns
*
* This library is open source and may be redistributed and/or modified under
* the terms of the OpenSceneGraph Public License (OSGPL) version 0.0 or
* (at your option) any later version. The full license is in LICENSE file
* included with this distribution, and on the openscenegraph.org website.
*
* This library 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. See the
* OpenSceneGraph Public License for more details.
*/
#include <osgDB/ReadFile>
#include <osgUtil/Optimizer>
#include <osgProducer/Viewer>
#include <osgEphemeris/EphemerisModel>
int main(int argc, char **argv)
{
// Parse command line arguments
osg::ArgumentParser args( &argc, argv );
// Set up the viewer
osgProducer::Viewer viewer(args);
viewer.setUpViewer(osgProducer::Viewer::STANDARD_SETTINGS);
// Tell the viewer what to display for a help message
viewer.getUsage(*args.getApplicationUsage());
// Load up the models specified on the command line
osg::ref_ptr<osg::Group> root = new osg::Group;
osg::ref_ptr<osg::Node> model = osgDB::readNodeFiles(args);
if( model.valid() )
root->addChild( model.get() );
// Define the Ephemeris Model and its radius
osg::BoundingSphere bs = model->getBound();
osg::ref_ptr<osgEphemeris::EphemerisModel> ephemerisModel = new osgEphemeris::EphemerisModel;
ephemerisModel->setSkyDomeRadius( bs.radius()*2 );
ephemerisModel->setSkyDomeCenter( bs.center() );
// Optionally, Set the AutoDate and Time to false so we can control it with the GUI
//ephemerisModel->setAutoDateTime( false );
// Optionally, uncomment this if you want to move the Skydome, Moon, Planets and StarField with the mouse
//ephemerisModel->setMoveWithEyePoint(false);
root->addChild( ephemerisModel.get() );
osgUtil::Optimizer optimizer;
optimizer.optimize(root.get());
// set the scene to render
viewer.setSceneData(root.get());
// Realize the viewer
viewer.realize();
while( !viewer.done() )
{
viewer.sync();
viewer.update();
viewer.frame();
}
viewer.sync();
return 0;
}
|
The following lines set up and add the osgEphemeris::EphemerisModel
class:
// Define the Ephemeris Model and its radius
osg::BoundingSphere bs = model->getBound();
osg::ref_ptr<osgEphemeris::EphemerisModel> ephemerisModel = new osgEphemeris::EphemerisModel;
ephemerisModel->setSkyDomeRadius( bs.radius()*2 );
ephemerisModel->setSkyDomeCenter( bs.center() );
root->addChild( ephemerisModel.get() );
|
setSkyDomeRadius( bs.radius()*2) and setSkyDomeCenter(bs.center())
is the only real essential call required for practical use of osgEphemeris.
All other defaults should result in desired default behavior. Note that we use the
bounding sphere of the model loaded on the command line as the parameter for defining
the radius of the SkyDome.
Other parameters that can be set at initialization time are AutoDateTime,
MoveWithEyepoint, and setting an UpdateCallback.
AutoDateTime gets a boolean value and is set with the api thusly,
ephemerisMode->setAutoDateTime( false );
|
AutoDateTime tells the Ephemeris Model to update the date and time
automatically by reading the computer's clock. Thus, the position of the
heavenly bodies will reflect the current time as set on the computer.
This value is set to true by default. Set this to false
if you intend to change the date and time dynamically or by some method
other than the current time of the computer's clock.
MoveWithEyePoint gets a boolean value and is set with the API thusly,
ephemerisMode->setMoveWithEyePoint( true );
|
MoveWithEyePoint tells the Ephemeris Model to keep the skydome and
position of the view of the heavenly bodies always centered at the eyepoint.
This value is set to true by default. Set this to false if
you intend to be able to manipulate the camera to points outside the
ephemeris SkyDome. This is useful for debugging or simply getting a sense
of the osgEphemeris implementation.
The parameters discussed in this section are settable only at initialization
time and remain static for the life of the EphemerisModel class instance.
Dynamic changes are discussed in the following sections. Dynamic changes
can be set by using a callback method. This UpdateCallack is set
statically as well, and is discussed in the next section.