Hello everyone!

I am using line segment intersectors to do ray-tracing. i trace rays from the 
window into the scene and then the consequent rays. This will be a no-time 
answer for those fluent with scene graph, i'm sure.

i have a scene and a osgViewer::View, in which the scene is displayed. i use 
the camera from the View to accept the line segment intersectors. The camera 
becomes the root of the scene:
Code:
_tracer->getScene()->accept(intersectionVisitor);

where the scene is actually the camera retreived from the osgViewer::View this 
way
Code:
wm->getSceneView()->getCamera()


With this setup, i'm getting pretty intersections and this part works fine. 
However, i need the rendering camera to stay fixed while the View's camera 
moves around.
So i tried making a copy of the View's camera when the tracer is initialized, 
but i'm getting black screen computed in a fraction of the computation time 
needed for the correct picture. I thought there was some problem with matrices, 
but i compared them and they appear to be the same.

With this camera
Code:
wm->getSceneView()->getCamera()// this is passed to the tracer object as a 
_masterCamera

I'm getting correct rendering results. It is the _masterCamera in the tracer 
object. Now, I tried these 3 approaches: (this is a code snippet from the 
tracer object's constructor)
Code:
// 1)
_renderCamera = dynamic_cast<osg::Camera*> 
(_masterCamera->clone(osg::CopyOp::DEEP_COPY_ALL)); // this really should be 
working
// 2)
_renderCamera = dynamic_cast<osg::Camera*> 
(_masterCamera->clone(osg::CopyOp::SHALLOW_COPY));
// 3)
_renderCamera = new osg::Camera;
_renderCamera->addChild(_scene);


before every rendering, updateCamera() is called, it copies the matrices from 
the _master camera into the _render camera
Code:
_renderCamera->setViewMatrix(_masterCamera->getViewMatrix());
_renderCamera->setProjectionMatrix(_masterCamera->getProjectionMatrix());


Doing this check for matrix equity 
Code:
if(_masterCamera->getViewMatrix() == _renderCamera->getViewMatrix() && 
_masterCamera->getProjectionMatrix() == _renderCamera->getProjectionMatrix()){
        std::cout << "equal matrices" << std::endl;
}

I get the string printed out every time i start rendering, meaning the matrices 
should be equal.

So why am I not getting any result ? neither of the three approaches work. if 
the problem was having two root cameras, why does not the DEEP copy work, at 
least ? i am not concerned about memory usage for now. Is there a special way I 
have to copy the scene or the camera?

also, please, anyone looking at this thread, please take a look at my posts in 
thread number 10149 (http://forum.openscenegraph.org/viewtopic.php?t=10149), I 
really need these issues solved this week.

I appreciate any suggestions.

Thank you very much in advance.

Cheers,
Andrey

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





_______________________________________________
osg-users mailing list
osg-users@lists.openscenegraph.org
http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org

Reply via email to