Hi Tran,

I changed the size of your left and right viewport
and now I have a stereo effect with your program.


         beginEditCP(vpleft);
         vpleft->setLeft(0);
         vpleft->setRight(1);
         vpleft->setBottom(0);
//         vpleft->setTop(0.5);
         vpleft->setTop(1);
         endEditCP  (vpleft);

         beginEditCP(vpright);
         vpright->setLeft(0);
         vpright->setRight(1);
//         vpright->setBottom(0.5);
         vpright->setBottom(0);
         vpright->setTop(1);
         vpright->setBackground(vp1->getBackground());
         vpright->setRoot(vp1->getRoot());
        endEditCP  (vpright);


Your,

Khai Binh Duong



> -----Ursprüngliche Nachricht-----
> Von: [EMAIL PROTECTED]
> [mailto:[EMAIL PROTECTED] Auftrag von Tran
> Thanh Hiep
> Gesendet: Dienstag, 14. Juni 2005 14:24
> An: [email protected]
> Betreff: [Opensg-users] why program do not run it stereo mode
>
>
> this code test stereo program :
> // OpenSG Tutorial Example: Hello World
> //
> // Minimalistic OpenSG program
> //
> // This is the shortest useful OpenSG program
> // (if you remove all the comments ;)
> //
> // It shows how to use OpenSG together with GLUT to
> create a little
> // interactive scene viewer.
> //
>
> // GLUT is used for window handling
> #include <OpenSG/OSGGLUT.h>
>
> // General OpenSG configuration, needed everywhere
> #include <OpenSG/OSGConfig.h>
>
> // Methods to create simple geometry: boxes, spheres,
> tori etc.
> #include <OpenSG/OSGSimpleGeometry.h>
>
> // The GLUT-OpenSG connection class
> #include <OpenSG/OSGGLUTWindow.h>
>
> // A little helper to simplify scene management and
> interaction
> #include <OpenSG/OSGSimpleSceneManager.h>
> #include <OpenSG/OSGGLUT.h>
> #include <OpenSG/OSGConfig.h>
> #include <OpenSG/OSGSimpleGeometry.h>
> #include <OpenSG/OSGGLUTWindow.h>
> #include <OpenSG/OSGSolidBackground.h>
> #include <OpenSG/OSGDirectionalLight.h>
> #include <OpenSG/OSGPerspectiveCamera.h>
> #include <OpenSG/OSGTransform.h>
> #include <OpenSG/OSGRenderAction.h>
> #include <OpenSG/OSGViewport.h>
> #include <OpenSG/OSGGradientBackground.h>
> #include <OpenSG/OSGImageBackground.h>
> #include <OpenSG/OSGImage.h>
> #include <OpenSG/OSGImageForeground.h>
> #include <OpenSG/OSGFileGrabForeground.h>
> #include <OpenSG/OSGPerspectiveCamera.h>
> #include <OpenSG/OSGStereoBufferViewport.h>
> #include <OpenSG/OSGColorBufferViewport.h>
> #include <OpenSG/OSGShearedStereoCameraDecorator.h>
> #include <OpenSG/OSGSceneFileHandler.h>
>
>
> // Activate the OpenSG namespace
> // This is not strictly necessary, you can also prefix
> all OpenSG symbols
> // with OSG::, but that would be a bit tedious for
> this example
> OSG_USING_NAMESPACE
>
> // The SimpleSceneManager to manage simple
> applications
> //SimpleSceneManager *mgr;
>
> PerspectiveCameraPtr leftcamera;
> PerspectiveCameraPtr rightcamera;
> ViewportPtr leftviewport;
> ViewportPtr rightviewport;
> WindowPtr window;
> NodePtr scene;
> NodePtr
> leftCamBeacon,rightCamBeacon,lightBeacon,lightNode;
> RenderAction *renderAct;
>
> ShearedStereoCameraDecoratorPtr decoleft, decoright;
> Real32 zpp = 2, ed = 1;
>
>  bool stereobuffer = false;
>  bool amberblue = false;
>
> // forward declaration so we can have the interesting
> stuff upfront
> void create_Camera_Viewport();
> NodePtr create_scene();
>
> void setupStereo(WindowPtr &win);
> void setupStereoService(unsigned char k,int,int);
> void checkInitMode(int argc, char **argv);
> int  setupGLUT( int *argc, char *argv[] );
>
>
> // Initialize GLUT & OpenSG and set up the scene
> int main(int argc, char **argv)
> {
>     // OSG init
>     osgInit(argc,argv);
>
>     // GLUT init
>     int winid = setupGLUT(&argc, argv);
>       checkInitMode(argc,argv);
>
>     // the connection between GLUT and OpenSG
>     GLUTWindowPtr gwin= GLUTWindow::create();
>       renderAct=RenderAction::create();
>       gwin->setSize(1024,768);
>     gwin->setId(winid);
>
>
>    // gwin->init();
>
>     // create the scene
>       scene = Node::create();
>       //NodePtr temp=create_scene();
>       beginEditCP(scene);
>               scene->setCore(Group::create());
>
>       endEditCP(scene);
>       scene=create_scene();
>
>       create_Camera_Viewport();
>       window=gwin;
>       window->addPort(leftviewport);
>       window->addPort(rightviewport);
>
>       setupStereo(window);
>
>       window->init();
>
>     // create the SimpleSceneManager helper
>     //mgr = new SimpleSceneManager;
>
>     // tell the manager what to manage
>     //mgr->setWindow(gwin );
>     //mgr->setRoot  (scene);
>
>     // show the whole scene
>     //mgr->showAll();
>         GLint val;
>
> #define cv(v)\
>     glGetIntegerv((v),&val);\
>     printf("%s: %d\n", #v, val)
>
>     cv(GL_RED_BITS);
>     cv(GL_GREEN_BITS);
>     cv(GL_BLUE_BITS);
>     cv(GL_DEPTH_BITS);
>
>     glEnable(GL_DEPTH_TEST);
>
>     // GLUT main loop
>     glutMainLoop();
>
>     return 0;
> }
>
> //
> // GLUT callback functions
> //
>
> // redraw the window
> void display(void)
> {
>       window->render(renderAct);
>       //glutPostRedisplay();
>    // mgr->redraw();
> }
>
> // react to size changes
> void reshape(int w, int h)
> {
>     window->resize(w, h);
>     glutPostRedisplay();
> }
>
>
>
> // react to mouse motions with pressed buttons
> void motion(int x, int y)
> {
>  ///  mgr->mouseMove(x, y);
>     glutPostRedisplay();
> }
>
> // react to keys
> void keyboard(unsigned char k, int x, int y)
> {
>
>     switch(k)
>     {
>         case 27:
>         {
>             OSG::osgExit();
>             exit(0);
>         }
>         break;
>     }
>       setupStereoService(k,x,y);
>       //glutPostRedisplay();
> }
>
> // setup the GLUT library which handles the windows
> for us
> int setupGLUT(int *argc, char *argv[])
> {
>     glutInit(argc, argv);
>    // glutInitDisplayMode(GLUT_RGB | GLUT_DEPTH |
> GLUT_DOUBLE);
>
>     int winid = glutCreateWindow("OpenSG");
>
>     glutReshapeFunc(reshape);
>     glutDisplayFunc(display);
>       glutIdleFunc(display);
>
> //    glutMouseFunc(mouse);
>     glutMotionFunc(motion);
>     glutKeyboardFunc(keyboard);
>
>     return winid;
> }
> void create_Camera_Viewport()
> {
>       leftcamera=PerspectiveCamera::create();
>       rightcamera=PerspectiveCamera::create();
>
>       beginEditCP(leftcamera);
>               leftcamera->setBeacon(leftCamBeacon);
>               leftcamera->setFov(deg2rad(90));
>               leftcamera->setNear(0.1);
>               leftcamera->setFar(100000);
>       endEditCP(leftcamera);
>
>       beginEditCP(rightcamera);
>               rightcamera->setBeacon(rightCamBeacon);
>               rightcamera->setFov(deg2rad(90));
>               rightcamera->setNear(0.1);
>               rightcamera->setFar(100000);
>       endEditCP(rightcamera);
>
>       GradientBackgroundPtr
> bg=GradientBackground::create();
>     beginEditCP(bg);
>         bg->addLine(Color3f(0,0,0),0);
>         bg->addLine(Color3f(1,1,1),1);
>     endEditCP(bg);
>       GradientBackgroundPtr
> bg1=GradientBackground::create();
>     beginEditCP(bg1);
>         bg1->addLine(Color3f(0,0,0),0);
>         bg1->addLine(Color3f(1,1,1),1);
>     endEditCP(bg1);
>
>       leftviewport=Viewport::create();
>       rightviewport=Viewport::create();
>       beginEditCP(leftviewport);
>               leftviewport->setBackground(bg);
>               leftviewport->setCamera(leftcamera);
>               leftviewport->setRoot(scene);
>               leftviewport->setSize(0,0,0.5,1);
>       endEditCP(leftviewport);
>       beginEditCP(rightviewport);
>               rightviewport->setBackground(bg1);
>               rightviewport->setCamera(rightcamera);
>               rightviewport->setRoot(scene);
>               rightviewport->setSize(0.5,0,1,1);
>       beginEditCP(rightviewport);
> }
> NodePtr  create_scene()
> {
>       NodePtr node=Node::create();
>       beginEditCP(node);
>               node->setCore(Group::create());
>       endEditCP(node);
>       leftCamBeacon = Node::create();
>       rightCamBeacon = Node::create();
>       lightBeacon = Node::create();
>       lightNode = Node::create();
>       beginEditCP(leftCamBeacon);
>       beginEditCP(rightCamBeacon);
>       beginEditCP(lightBeacon);
>               TransformPtr leftCamTrans, rightCamTrans,
> lightTrans;
>
>         leftCamTrans = Transform::create();
>         rightCamTrans = Transform::create();
>         lightTrans = Transform::create();
>
>         beginEditCP(leftCamTrans);
>         beginEditCP(rightCamTrans);
>         beginEditCP(lightTrans);
>
>             Matrix leftM, rightM, lightM;
>                       leftM.setIdentity();
>                       rightM.setIdentity();
>                       lightM.setIdentity();
>
>             leftM.setTransform(Vec3f(0,0,7));
>             rightM.setTransform(Vec3f(0,0,7));
>             //lightM.setTransform(Vec3f(1,10,2));
>
>             leftCamTrans->setMatrix(leftM);
>             rightCamTrans->setMatrix(rightM);
>             lightTrans->setMatrix(lightM);
>
>         endEditCP(leftCamTrans);
>         endEditCP(rightCamTrans);
>         endEditCP(lightTrans);
>
>         leftCamBeacon->setCore(leftCamTrans);
>         rightCamBeacon->setCore(rightCamTrans);
>         lightBeacon->setCore(lightTrans);
>
>       endEditCP(lightBeacon);
>       endEditCP(rightCamBeacon);
>       endEditCP(leftCamBeacon);
>
>   DirectionalLightPtr dLight =
> DirectionalLight::create();
>
>     beginEditCP(dLight);
>         dLight->setDirection(Vec3f(0,1,2));
>
>         //color information
>         dLight->setDiffuse(Color4f(1,1,1,1));
>         dLight->setAmbient(Color4f(0.2,0.2,0.2,1));
>         dLight->setSpecular(Color4f(1,1,1,1));
>
>         //set the beacon
>         dLight->setBeacon(lightBeacon);
>     endEditCP  (dLight);
>
>       lightNode = Node::create();
>       NodePtr torus=makeTorus(0.1,4,16,16);
>
>     beginEditCP(lightNode);
>         lightNode->setCore(dLight);
>         lightNode->addChild(torus);
>     endEditCP(lightNode);
>
>       beginEditCP(node);
>           node->addChild(lightNode);
>         node->addChild(leftCamBeacon);
>         node->addChild(rightCamBeacon);
>         node->addChild(lightBeacon);
>       endEditCP(node);
>
>
>       return node;
>
> }
>
> /*ShearedStereoCameraDecoratorPtr decoleft, decoright;
> Real32 zpp = 2, ed = 1;
>
>  bool stereobuffer = false;
>  bool amberblue = false;
> */
> void setupStereo(WindowPtr &win)
> {
>       ViewportPtr vp = win->getPort(0);
>       ViewportPtr vp1 = win->getPort(1);
>       if(vp!=vp1) printf("\nOk");
>     PerspectiveCameraPtr cam =
> PerspectiveCameraPtr::dcast(vp->getCamera());
>       PerspectiveCameraPtr cam1 =
> PerspectiveCameraPtr::dcast(vp1->getCamera());
>
>     beginEditCP(cam);
>     cam->setFov(deg2rad(90));
>     cam->setAspect(1);
>     endEditCP  (cam);
>
>       beginEditCP(cam1);
>     cam1->setFov(deg2rad(90));
>     cam1->setAspect(1);
>     endEditCP  (cam1);
>
>         // create the decorators and the second viewport
>     ViewportPtr vpleft,vpright;
>
>     decoleft = ShearedStereoCameraDecorator::create();
>     decoright =
> ShearedStereoCameraDecorator::create();
>
>     beginEditCP(decoleft);
>     decoleft->setEyeSeparation(ed);
>     decoleft->setZeroParallaxDistance(zpp);
>     decoleft->setLeftEye(true);
>     decoleft->setDecoratee(cam);
>     endEditCP  (decoleft);
>
>     beginEditCP(decoright);
>     decoright->setEyeSeparation(ed);
>     decoright->setZeroParallaxDistance(zpp);
>     decoright->setLeftEye(false);
>     decoright->setDecoratee(cam1);
>     endEditCP  (decoright);
>
>           if(amberblue)
>     {
>         ColorBufferViewportPtr svpleft =
> ColorBufferViewport::create();
>         ColorBufferViewportPtr svpright =
> ColorBufferViewport::create();
>
>         beginEditCP(svpleft);
>         svpleft->setLeft(0);
>         svpleft->setRight(1);
>         svpleft->setBottom(0);
>         svpleft->setTop(1);
>         svpleft->setCamera(decoleft);
>         svpleft->setBackground(vp->getBackground());
>         svpleft->setRoot(vp->getRoot());
>         svpleft->setRed(GL_TRUE);
>         svpleft->setGreen(GL_TRUE);
>         svpleft->setBlue(GL_FALSE);
>         svpleft->setAlpha(GL_TRUE);
>         endEditCP  (svpleft);
>
>         beginEditCP(svpright);
>         svpright->setLeft(0);
>         svpright->setRight(1);
>         svpright->setBottom(0);
>         svpright->setTop(1);
>         svpright->setCamera(decoright);
>         svpright->setBackground(vp1->getBackground());
>         svpright->setRoot(vp1->getRoot());
>         svpright->setRed(GL_FALSE);
>         svpright->setGreen(GL_FALSE);
>         svpright->setBlue(GL_TRUE);
>         svpright->setAlpha(GL_FALSE);
>         endEditCP  (svpright);
>
>         vpleft = svpleft;
>         vpright = svpright;
>               printf("\nVao mau\n");
>       }
>     else if(stereobuffer)
>     {
>               printf("\nVao Stereo");
>         StereoBufferViewportPtr svpleft =
> StereoBufferViewport::create();
>         StereoBufferViewportPtr svpright =
> StereoBufferViewport::create();
>
>         beginEditCP(svpleft);
>         svpleft->setLeft(0);
>         svpleft->setRight(1);
>         svpleft->setBottom(0);
>         svpleft->setTop(1);
>         svpleft->setCamera(decoleft);
>         svpleft->setBackground(vp->getBackground());
>         svpleft->setRoot(vp->getRoot());
>         svpleft->setLeftBuffer(true);
>         svpleft->setRightBuffer(false);
>         endEditCP  (svpleft);
>
>         beginEditCP(svpright);
>         svpright->setLeft(0);
>         svpright->setRight(1);
>         svpright->setBottom(0);
>         svpright->setTop(1);
>         svpright->setCamera(decoright);
>         svpright->setBackground(vp1->getBackground());
>         svpright->setRoot(vp1->getRoot());
>         svpright->setLeftBuffer(false);
>         svpright->setRightBuffer(true);
>         endEditCP  (svpright);
>
>         vpleft = svpleft;
>         vpright = svpright;
>     }
>     else
>     {
>               printf("\nVao viewport");
>         vpleft = vp;
>         vpright = Viewport::create();
>
>         beginEditCP(vpleft);
>         vpleft->setLeft(0);
>         vpleft->setRight(1);
>         vpleft->setBottom(0);
>         vpleft->setTop(0.5);
>         endEditCP  (vpleft);
>
>         beginEditCP(vpright);
>         vpright->setLeft(0);
>         vpright->setRight(1);
>         vpright->setBottom(0.5);
>         vpright->setTop(1);
>         vpright->setBackground(vp1->getBackground());
>         vpright->setRoot(vp1->getRoot());
>         endEditCP  (vpright);
>     }
>
>     beginEditCP(vpleft);
>     vpleft->setCamera(decoleft);
>     endEditCP  (vpleft);
>
>     beginEditCP(vpright);
>     vpright->setCamera(decoright);
>     endEditCP  (vpright);
>
>     beginEditCP(win);
>     win->subPort(vp);
>       win->subPort(vp1);
>     win->addPort(vpleft);
>     win->addPort(vpright);
>     endEditCP  (win);
>
> }
> void setupStereoService(unsigned char k,int,int)
> {
>       switch(k)
>     {
>     //case 27:    exit(1);
>     case '1':   zpp /= 1.1;
>                 break;
>     case '2':   zpp *= 1.1;
>                 break;
>     case 'z':   ed /= 1.1;
>                 break;
>     case 'x':   ed *= 1.1;
>                 break;
>     }
>
>     std::cout << "ZPP:" << zpp << " ED:" << ed <<
> std::endl;
>
>     beginEditCP(decoleft);
>     decoleft->setEyeSeparation(ed);
>     decoleft->setZeroParallaxDistance(zpp);
>     endEditCP  (decoleft);
>
>     beginEditCP(decoright);
>     decoright->setEyeSeparation(ed);
>     decoright->setZeroParallaxDistance(zpp);
>     endEditCP  (decoright);
> }
> void checkInitMode(int argc, char **argv)
> {
> // glutInit(&argc, argv);
>
>  //   bool stereobuffer = false;
>     //bool amberblue = false;
>     if(argc >= 2 && !strcmp(argv[1],"-s"))
>     {
>         stereobuffer = true;
>         --argc, ++argv;
>     }
>     if(argc >= 2 && !strcmp(argv[1],"-a"))
>     {
>         amberblue = true;
>         --argc, ++argv;
>     }
>     //stereobuffer = true;
>
>     glutInitDisplayMode(GLUT_RGB | GLUT_DEPTH |
> GLUT_DOUBLE |
>                         (stereobuffer?GLUT_STEREO:0)
> );
> }
>
> __________________________________________________
> Do You Yahoo!?
> Tired of spam?  Yahoo! Mail has the best spam protection around
> http://mail.yahoo.com
>
>
> -------------------------------------------------------
> This SF.Net email is sponsored by: NEC IT Guy Games.  How far
> can you shotput
> a projector? How fast can you ride your desk chair down the
> office luge track?
> If you want to score the big prize, get to know the little guy.
> Play to win an NEC 61" plasma display: http://www.necitguy.com/?r=20
> _______________________________________________
> Opensg-users mailing list
> [email protected]
> https://lists.sourceforge.net/lists/listinfo/opensg-users
>




-------------------------------------------------------
This SF.Net email is sponsored by: NEC IT Guy Games.  How far can you shotput
a projector? How fast can you ride your desk chair down the office luge track?
If you want to score the big prize, get to know the little guy.  
Play to win an NEC 61" plasma display: http://www.necitguy.com/?r=20
_______________________________________________
Opensg-users mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/opensg-users

Reply via email to