00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019 #include "SimpleViewer.h"
00020
00021 namespace uvsim
00022 {
00023
00024 SimpleViewer::SimpleViewer(int priority, float freq, osg::Group *scene, double manipDepth, osg::Vec3d &manipCenter,
00025 float frameSize, double fogStart, double fogEnd) :
00026 RealtimeThread(priority, freq), scene(scene), viewer(new osgViewer::Viewer), frame(new Frame(frameSize)),
00027 manip(new osgGA::TrackballManipulator)
00028 {
00029 manip->setAutoComputeHomePosition(false);
00030 scene->addChild(frame->root);
00031 viewer->setSceneData(scene);
00032 viewer->setCameraManipulator(manip);
00033 viewer->getCamera()->setComputeNearFarMode(osg::CullSettings::DO_NOT_COMPUTE_NEAR_FAR);
00034 osg::Fog *fog = new osg::Fog();
00035 fog->setMode(osg::Fog::LINEAR);
00036 fog->setStart(fogStart);
00037 fog->setEnd(fogEnd);
00038 fog->setFogCoordinateSource(osg::Fog::FRAGMENT_DEPTH);
00039 fog->setColor(osg::Vec4(0,0,1,1));
00040 viewer->getCamera()->getOrCreateStateSet()->setAttributeAndModes(fog, osg::StateAttribute::ON);
00041 viewer->getCamera()->setClearDepth(10000);
00042 viewer->setThreadSafeReferenceCounting(true);
00043 manip->setCenter(manipCenter);
00044 manip->setDistance(manipDepth);
00045 viewer->setUpViewInWindow(0,0,300,300);
00046 }
00047
00048 SimpleViewer::~SimpleViewer()
00049 {
00050 }
00051
00052 void SimpleViewer::loop()
00053 {
00054 if (viewer->done()) stop();
00055 viewer->frame();
00056 osg::Vec3d eye, center, up;
00057 viewer->getCamera()->getViewMatrixAsLookAt(eye, center, up);
00058 frame->root->setPosition(manip->getCenter());
00059
00060
00061
00062
00063
00064
00065
00066
00067
00068
00069
00070
00071
00072 }
00073
00074 }
00075
00076