Hi,

I'm having a problem with my application crashing when I try to create a 
while(!viewer->done()) loop. The run time error I am getting is:

Unhandled exception at 0x00361710 in elevator.exe: 0xC0000005: Access violation 
reading location 0x00000415.

Could someone take a look and help me out?



Code:
#include <osg/Geode>
#include <osg/Group>
#include <osg/MatrixTransform>
#include <osg/NodeVisitor>
#include <osg/Notify>
#include <osg/PositionAttitudeTransform>
#include <osg/Quat>
#include <osg/TexGen>

#include <osgDB/DatabasePager>
#include <osgDB/ReadFile>
#include <osgDB/Registry>

#include <osgUtil/IntersectVisitor>
#include <osgUtil/Optimizer>

#include <osgViewer/Viewer>
#include <osgViewer/ViewerEventHandlers>

#include <gl/gl.h>
#include <GL/glu.h>
#include <GL/glut.h>
#include <stdlib.h>
#include <iostream>


int main( int argc, char **argv )
{

        initTracker();

        // initialize the viewer.
        osg::ArgumentParser arguments(&argc,argv);

        viewer = new osgViewer::Viewer(arguments);

        
        osg::Group* elevatorRoot = new osg::Group();
        
        //create nodes: later for full tower, consider arrays of nodes
        osg::Node* elevatorNode                 = NULL;
        osg::Node* elevatorShaftNode            = NULL;
        osg::Node* chamberNode                  = NULL;
        

        //create transformers
        osg::PositionAttitudeTransform* rootPATXform            = new 
osg::PositionAttitudeTransform();
        osg::PositionAttitudeTransform* elevatorXform           = new 
osg::PositionAttitudeTransform();
        osg::PositionAttitudeTransform* elevatorShaftXform      = new 
osg::PositionAttitudeTransform();
        osg::PositionAttitudeTransform* chamberXform            = new 
osg::PositionAttitudeTransform();
        
        //create textures
        osg::Texture2D* elevatorTexture                 = new osg::Texture2D;
        osg::Texture2D* elevatorShaftTexture                    = new 
osg::Texture2D;
        osg::Texture2D* chamberTexture                  = new osg::Texture2D;
        
        elevatorTexture->setDataVariance(osg::Object::DYNAMIC);
        elevatorShaftTexture->setDataVariance(osg::Object::DYNAMIC);
        chamberTexture->setDataVariance(osg::Object::DYNAMIC);
        


        //load models
        elevatorNode            = 
osgDB::readNodeFile("C:/3DVisualizer_Ped_Walk/VE_Model/ElevatorModelsV2.obj");
        elevatorShaftNode       = 
osgDB::readNodeFile("C:/3DVisualizer_Ped_Walk/VE_Model/ElevatorShaftsModelV2.obj");
        chamberNode             = 
osgDB::readNodeFile("C:/3DVisualizer_Ped_Walk/VE_Model/Floor.obj");


        //add transformers to root
        elevatorRoot->addChild(elevatorXform);
        elevatorRoot->addChild(elevatorShaftXform);
        elevatorRoot->addChild(chamberXform);
        

        //add models to graph
        rootPATXform->addChild(elevatorRoot);
        elevatorXform->addChild(elevatorNode);
        elevatorShaftXform->addChild(elevatorShaftNode);
        chamberXform->addChild(chamberNode);


        //scale and position elements
        float rotate            = 3.1415926/2.0;
        osg::Vec3d axis         = osg::Vec3d(0,0,1);
        osg::Vec3d position     = osg::Vec3d(0.0,0.0,.000);
        osg::Vec3d farPos       = osg::Vec3d(5.30,0.0,.00);

        //Scale and position the chamber
        osg::Quat rootElevatorQuat = chamberXform->getAttitude();
        rootElevatorQuat.makeRotate(rotate,axis);
        chamberXform->setAttitude(rootElevatorQuat);
        chamberXform->setPosition(position);

        //Scale and position the elevator
        rootElevatorQuat = elevatorXform->getAttitude();
        rootElevatorQuat.makeRotate(rotate,axis);
        elevatorXform->setAttitude(rootElevatorQuat);
        elevatorXform->setPosition(position);

        //Scale and position the elevator Shaft
        rootElevatorQuat = elevatorShaftXform->getAttitude();
        rootElevatorQuat.makeRotate(rotate,axis);
        elevatorShaftXform->setAttitude(rootElevatorQuat);
        elevatorShaftXform->setPosition(position);


        //load Textures
        osg::Image* elevatorTextureImage = 
osgDB::readImageFile("C:/3DVisualizer_Ped_Walk/VE_Model/ElevatorTexture.jpg");
        if (!elevatorTextureImage)
        {
                cout << " couldn't find elevator texture." << std::endl;
        }
        else{
                elevatorTexture->setImage(elevatorTextureImage);
                
elevatorNode->getOrCreateStateSet()->setTextureAttributeAndModes( 0, 
elevatorTexture, osg::StateAttribute::ON);
        }

        
        osg::Image* elevatorShaftTextureImage = 
osgDB::readImageFile("C:/3DVisualizer_Ped_Walk/VE_Model/ElevatorShaftTextureV2.jpg");
        if (!elevatorShaftTextureImage)
        {
                std::cout << " couldn't find elevator shaft texture." << 
std::endl;
        }
        else{
                elevatorShaftTexture->setImage(elevatorShaftTextureImage);
                
elevatorShaftNode->getOrCreateStateSet()->setTextureAttributeAndModes( 0, 
elevatorShaftTexture, osg::StateAttribute::ON);
        }

        viewer->setSceneData(elevatorRoot);


        osgViewer::Viewer::Windows windows;


        //create Slave Cameras
        
        int xoffset = 0;
        int yoffset = 0;

        // left window + left slave camera
        {
                osg::ref_ptr<osg::GraphicsContext::Traits> traits = new 
osg::GraphicsContext::Traits;
                traits->x = xoffset + 0;
                traits->y = yoffset + 0;
                traits->width = 1280;
                traits->height = 1040;
                traits->windowDecoration = false;
                traits->doubleBuffer = true;
                traits->sharedContext = 0;
                osg::ref_ptr<osg::GraphicsContext> gc = 
osg::GraphicsContext::createGraphicsContext(traits.get());
        
                osg::ref_ptr<osg::Camera> camera = new osg::Camera;
                camera->setGraphicsContext(gc.get());
                camera->setViewport(new osg::Viewport(0,0, traits->width, 
traits->height));
                GLenum buffer = traits->doubleBuffer ? GL_BACK : GL_FRONT;
                camera->setDrawBuffer(buffer);
                camera->setReadBuffer(buffer);


                // add this slave camera to the viewer, with a shift left of 
the projection matrix
                viewer->addSlave(camera.get(), 
osg::Matrixd::translate(-0.030,0.0,0.0), osg::Matrixd::rotate(-.13962625, 
osg::Vec3d(0,1,0))); //0.2268928
                        
            }


        
                // right window + right slave camera
            {
                osg::ref_ptr<osg::GraphicsContext::Traits> traits = new 
osg::GraphicsContext::Traits;
                traits->x = xoffset + 1280;
                traits->y = yoffset + 0;
                traits->width = 1280;
                traits->height = 1040;
                traits->windowDecoration = false;
                traits->doubleBuffer = true;
                traits->sharedContext = 0;
                        //showFrame(false);
        
                osg::ref_ptr<osg::GraphicsContext> gc = 
osg::GraphicsContext::createGraphicsContext(traits.get());
        
                osg::ref_ptr<osg::Camera> camera = new osg::Camera;
                camera->setGraphicsContext(gc.get());
                camera->setViewport(new osg::Viewport(0,0, traits->width, 
traits->height));
                GLenum buffer = traits->doubleBuffer ? GL_BACK : GL_FRONT;
                camera->setDrawBuffer(buffer);
                camera->setReadBuffer(buffer);

                viewer->addSlave(camera.get(), 
osg::Matrixd::translate(-0.030,0.0,0.0), osg::Matrixd::rotate(.13962625, 
osg::Vec3d(0,1,0))); //0.2268928
                        
            }
                

        viewer->realize();


    //here is where it is crashing
    while( !viewer->done() )
    {
                camUpdate(viewer);
        viewer->frame();        
    }


    return 0;
}





Thank you!

Cheers,
Robert

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





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

Reply via email to