File: example1.cpp

package info (click to toggle)
openscenegraph 1.2.0-2
  • links: PTS
  • area: main
  • in suites: etch, etch-m68k
  • size: 26,924 kB
  • ctags: 25,229
  • sloc: cpp: 239,326; ansic: 2,178; sh: 1,990; yacc: 548; perl: 237; makefile: 227; lex: 151
file content (49 lines) | stat: -rw-r--r-- 1,666 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
#include <Producer/Camera>
#include <osgProducer/OsgSceneHandler>

#include <osgDB/ReadFile>
#include <osg/Node>
#include <osg/Vec3>


int main(int argc, char **argv)
{
    // Load your OSG database
    osg::ref_ptr<osg::Node> cow = osgDB::readNodeFile( "cow.osg" );
    if( !cow.valid() )
    {
        std::cerr << "\n\tOoops, this application needs the \"cow.osg\" model.\n\n";
        return 1;
    }

    // Set up the Scene Handler
    Producer::ref_ptr<osgProducer::OsgSceneHandler> sceneHandler = new osgProducer::OsgSceneHandler;
    sceneHandler->getSceneView()->setDefaults();
    sceneHandler->getSceneView()->setSceneData( cow.get() );

    // Create a Producer Camera and pass it the scene handler
    Producer::ref_ptr<Producer::Camera> camera = new Producer::Camera;
    // Optional
    camera->getRenderSurface()->setWindowRectangle( 100, 100, 800, 600 );
    camera->setSceneHandler( sceneHandler.get() );

    // Camera manipulation stuff
    osg::BoundingSphere bs = cow->getBound();
    osg::Vec3 center = bs.center();
    float radius = bs.radius() * 3;
    float viewingAngle = 0.0;

    do {
        // Rotate around the cow...
        viewingAngle += osg::DegreesToRadians(1.0);
        osg::Vec3 eye = center + osg::Vec3( radius * cos(viewingAngle),
                                            radius * sin(viewingAngle),
                                            0);
        camera->setViewByLookat( eye[0], eye[1], eye[2],
                                 center[0], center[1], center[2],
                                 0, 0, 1 );

        // Click!
        camera->frame();
    } while( camera->getRenderSurface()->isRealized() );
}