Problems using SoRayPickAction

"Florian Stendel" <[email protected]> Thu, 13 Nov 2008 02:51:36 +0100
Newsgroups gmane.comp.video.info-inventor.devel
Message-ID <[email protected]>
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