info-inventor-dev
[Top] [All Lists]

Problems using SoRayPickAction

To: info-inventor-dev@xxxxxxxxxxx
Subject: Problems using SoRayPickAction
From: "Florian Stendel" <vincentdhs@xxxxxx>
Date: Thu, 13 Nov 2008 02:51:36 +0100
Sender: info-inventor-dev-bounce@xxxxxxxxxxx
Hi there,


i've (obviously) got a problem.


I am currently implementing an Node, which should position me three 
Shapenode's(the DiagnosticMirrors-Objects in the following source) with respect 
to the current Cameraview (or, in other words, places those nodes in the 
camera-coordinate system).


The node is inherited from SoShape and at initialisation creates an internal 
network of those shapenodes (as follows):


void SoAllSurfaceMirrors::createNetwork(){


        root                                                     = new 
SoSeparator();
        
        root->ref();

        mirMirrorOne                                     = new 
SoDiagnosticMirror;
        mirMirrorTwo                                     = new 
SoDiagnosticMirror;
        mirMirrorThree                                   = new 
SoDiagnosticMirror;

        camCoords                                            = new SoTransform;
        pitch                                                = new SoTransform;
        extension                                                = new 
SoTransform;
        scale                                                    = new 
SoTransform;
        tsfMirror                                            = new SoTransform;

        root->addChild(camCoords);      
        root->addChild(tsfMirror);

    /*********************************/
        /** SPECIFIC PART OF MIRROR ONE **/
        /*********************************/
        
        SoSeparator *sepMirrorOne       = new SoSeparator;

        sepMirrorOne->addChild(extension);
        sepMirrorOne->addChild(pitch);

        sepMirrorOne->addChild(scale);
        sepMirrorOne->addChild(mirMirrorOne);

        root->addChild(sepMirrorOne);


       ... (and so on)
}

This network is rendered into a Texture in the GLRender-Method using an 
SoGLRenderaction which shares its context with the calling (the 
SoGLRenderAction which called GLRender) SoGLRenderaction.
(this part works just fine).



Now i want to change the appearance of the Shape/DiagnosticMirror-Node based on 
user-input (e.g. draw/highlight the mirrors in a different color, if the user's 
mouse cursor is over those objects). Basically i need to be able to pick those 
nodes of the internal network.


Therefore i tried to use the handleEvent-Method (afaik the SoHandleEventAction 
is doing picking as well) which didn't turned out to be working. (Of course it 
doesn't, since the Action doesn't know anything about the internal network)

The next thing i tried, was invoking an SoRayPickAction on the network   which 
doesn't work either because this action needs an existing camera volume to be 
able to pick something. 

Now, if i create a new (internal) network which consists of a new seperator and 
two childs:SoOrthographic/PerspectiveCamera and the already existing root, the 
SoRayPickAction does something. Unfortunately the viewvolume of the camera in 
the internal network does not update to the view volume of the "outer" camera.

So my question:  Is there a way to set the ViewVolume of the internal 
camera/the SoRaypickaction (to the ViewVolume etc. of the outer camera)?


regards
Florian Stendel

P.S.: Please let me know if you need further sources
 
-- 
"Feel free" - 5 GB Mailbox, 50 FreeSMS/Monat ...
Jetzt GMX ProMail testen: http://www.gmx.net/de/go/promail

<Prev in Thread] Current Thread [Next in Thread>
  • Problems using SoRayPickAction, Florian Stendel <=