Much thanks.
Regarding more cluster stuff:
It says in the documentation that OpenSG could easily
be used to render one scene with 48 cluster nodes, but
I see no clear way to do that.  Could someone explain
to me the finer details behind that?

Cheers,
--Brian

--- Dirk Reiners <[EMAIL PROTECTED]> wrote:

> 
>       Hi Brian,
> 
> On Tue, 2006-04-11 at 10:31 -0700, Brian Sowers
> wrote:
> > Hi,
> > We're trying to write a clustering application
> which
> > displays a scene on multiple viewports.  Each
> viewport
> > may potentially show the scene at a different
> angle or
> > with different properties (ie: multiple
> resolutions). 
> > Our thoughts are to use multiple scene graphs, or
> > something to that extent.  Does anyone have any
> good
> > suggestions on how to approach the problem?
> > Barring that, does anyone have any good example
> > clustering applications that use OpenSG that we
> could
> > look at for reference?
> 
> The core philosophy of OpenSG clustering is that it
> should be invisible.
> It's possible to get down deeper, but as far as
> possible you shouldn't
> have to worry about clustering at all.
> 
> Therefore you should be able to prototype your
> application on a desktop
> with a window that shows the different viewports you
> want to show on the
> cluster and then for cluster mode switch to a large
> cluster window and
> just have it work. That's why very few people write
> their own cluster
> servers, they just use the testClusterServer or the
> one from the
> Tutorials. Similarly for the cluster client
> application. Whatever you
> can render in a single desktop window, put it into a
> cluster window and
> be done.
> 
> Concerning the multiple viewports and multiple
> graphs: if your scenes
> are really totally separate multiple graphs are a
> good solution.
> However, if some objects are the same in both graphs
> it is better to
> just put all scenes in one graph and use traversal
> masks
> (Node::setTravMask, Viewport::setTravMask) to decide
> which objects show
> up in which viewport.
> 
> There are no well-documented examples for multiple
> viewports, because
> the SSM doesn't really work well with them. I
> attached one that show how
> to do it in general, I hope that helps get you
> going.
> 
> Yours
> 
>       Dirk
> 
> 
> 
> > // 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/OSGBaseFunctions.h>
> #include <OpenSG/OSGGradientBackground.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;
> 
> // forward declaration so we can have the
> interesting stuff upfront
> int setupGLUT( int *argc, char *argv[] );
> 
> 
> 
> ViewportPtr vp2; // Need that in key()
> 
> // 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);
> 
>     // the connection between GLUT and OpenSG
>     GLUTWindowPtr gwin= GLUTWindow::create();
>     gwin->setId(winid);
>     gwin->init();
>     
>     // create the scene
>     NodePtr torus = makeTorus(.5, 2, 16, 16);
> 
>     beginEditCP(torus);
>     torus->setTravMask(0x1);
>     endEditCP(torus);
>     
> 
>     // create the scene for the second viewport
>     NodePtr cone = makeCone(2, 2, 8, true, true);
> 
>     beginEditCP(cone);
>     cone->setTravMask(0x2);
>     endEditCP(cone);
>   
>   
>     NodePtr scene = makeNodeFor(Group::create());
>     
>     beginEditCP(scene);
>     scene->addChild(torus);
>     scene->addChild(cone);
>     endEditCP(scene);
>     
>     // create the SimpleSceneManager helper
>     mgr = new SimpleSceneManager;
> 
>     // tell the manager what to manage
>     mgr->setWindow(gwin );
>     mgr->setRoot  (scene);
> 
> //I  use the viewport created by the SSM here and
> modify it.
> 
>    ViewportPtr vp1 = gwin->getPort(0);
>     beginEditCP(vp1);
>         vp1->setLeft(0);
>         vp1->setRight(0.5);
>         vp1->setTop(1);
>         vp1->setBottom(0);
>         vp1->setTravMask(0x1);
>     endEditCP(vp1);
> 
> //Create a second viewport with a different
> background and scene
> 
>     GradientBackgroundPtr grad =
> GradientBackground::create();
>     beginEditCP(grad);
>     grad->addLine(Color3f(0.7, 0.7, 0.8), 0);
>     grad->addLine(Color3f(0.0, 0.1, 0.3), 1);  
>     endEditCP(grad);
>     
>     
>     vp2 = Viewport::create();
>     beginEditCP(vp2);
>         vp2->setLeft(0.5);
>         vp2->setRight(1);
>         vp2->setTop(1);
>         vp2->setBottom(0);
>         vp2->setBackground(grad);
>         vp2->setCamera(vp1->getCamera());   // use
> the same Camera
>         vp2->setRoot(vp1->getRoot());       // Use
> the same scene
>         vp2->setTravMask(0x2);              //
> ...but a different travmask
>     endEditCP(vp2);
> 
>     //Adding the new viewport
> 
>     beginEditCP(gwin);
>         gwin->addPort(vp2);
>     beginEditCP(gwin);
> 
> 
>     // show the whole scene
>     mgr->showAll();
>     
>     // GLUT main loop
>     glutMainLoop();
> 
>     return 0;
> }
> 
> //
> // GLUT callback functions
> //
> 
> // redraw the window
> void display(void)
> {
>     mgr->redraw();
> }
> 
> // react to size changes
> void reshape(int w, int h)
> {
>     mgr->resize(w, h);
>     glutPostRedisplay();
> }
> 
> // react to mouse button presses
> void mouse(int button, int state, int x, int y)
> {
>     if (state)
>         mgr->mouseButtonRelease(button, x, y);
>     else
>         mgr->mouseButtonPress(button, x, y);
>         
>     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 ' ':
>         {
>         beginEditCP(vp2);
>         vp2->setTravMask(vp2->getTravMask() ^ 0x3);
>         endEditCP(vp2);
>         }
>         break;
>         
>         case 27:        
>         {
>             OSG::osgExit();
>             exit(0);
>         }
> 
=== message truncated ===


__________________________________________________
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 xPML, a groundbreaking scripting language
that extends applications into web and mobile media. Attend the live webcast
and join the prime developer group breaking into this new coding territory!
http://sel.as-us.falkag.net/sel?cmd=lnk&kid=110944&bid=241720&dat=121642
_______________________________________________
Opensg-users mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/opensg-users

Reply via email to