Hi,

I need to render the same scene from two angles. So i tried to create a 
osg::Viewer and set its scene data. Then I add the first camera to the viewer. 
And the scene renders fine. After that i tried to add the second camera to the 
viewer so i call viewer->addslave().

Cameras write to osg::image which i will be sending as data over the network at 
a later point, but this is irrelevant now.

I created an event on ctrl click which writes the osg::Image data to the hard 
drive. The master camera saves fine, but the slave camera saves a blank image 
file. So i guess i didn't set up the cameras correctly. This is the code in 
which i set up the cameras:


Code:
#include "Renderer.h"
#include <osgViewer/ViewerEventHandlers>
#include <osgDB/ReadFile>
#include "ApplicationEngine.h"
#include <osgGA/TrackballManipulator>
#include <osg/Image>
#include <osgDB/WriteFile>

#define VIEWPOINTDISTANCE 10

Renderer::Renderer()
: 
sceneManager(SceneManager::instance())
{
        mountedObject = NULL;
        masterImage = new osg::Image();
        masterImage->allocateImage(100, 100, 24, GL_RGB, GL_UNSIGNED_BYTE);
        layoutImage = new osg::Image();
        layoutImage->allocateImage(100, 100, 24, GL_RGB, GL_UNSIGNED_BYTE);

        cout<<"Stvaram View.\n";
        
        masterCamera = new osg::Camera();
    masterCamera->setProjectionMatrixAsPerspective(60.0, 1, 1, 1000.0);
        masterCamera->setViewMatrixAsLookAt(osg::Vec3(0, 40, 0), osg::Vec3(0, 
-5, 0), osg::Vec3(0, 0, 1));
        
        layoutCamera = new osg::Camera();
        layoutCamera->setProjectionMatrixAsOrtho(-200, 200, 200, -200, 1, 
1000.0);
        layoutCamera->setViewMatrixAsLookAt(osg::Vec3(0, 0, 100), osg::Vec3(0, 
0, -5), osg::Vec3(0, 1, 0));
    
        viewer = new osgViewer::Viewer();
        viewer->setCamera(masterCamera);

        masterCamera->attach(osg::Camera::COLOR_BUFFER, masterImage, 0, 0);
        layoutCamera->attach(osg::Camera::COLOR_BUFFER, layoutImage, 0, 0);

        viewer->addSlave(layoutCamera);
    viewer->addEventHandler(new osgViewer::StatsHandler());
        viewer->addEventHandler(ApplicationEngine::instance());
    viewer->setThreadingModel(osgViewer::Viewer::SingleThreaded);
        viewer->setSceneData(sceneManager->getRootNode());
    viewer->realize();

    sceneManager->attach(this);

}

void Renderer::renderScene()
{
    viewer->frame();
}




Also if there is a better way to get this screen image on every frame feel free 
to say so.Thank you!

Cheers,
Vedran[/code]

------------------
Read this topic online here:
http://forum.openscenegraph.org/viewtopic.php?p=27164#27164





_______________________________________________
osg-users mailing list
[email protected]
http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org

Reply via email to