Re: [osg-users] order of PreRender camera with respect to the main camera
Hi Robert, this is really good idea .. Haven't thought of Thanks again Nick On Mon, Oct 27, 2014 at 11:52 AM, Robert Osfield wrote: > HI Nick, > > If you Camera that is following the main camera requires the same view > matrix then could you not simply set the Camera::ReferenceFrame to > REALATVE_TF so that it inherits the view and projection matrix from above? > > Robert. > > On 25 October 2014 08:35, Trajce Nikolov NICK < > trajce.nikolov.n...@gmail.com> wrote: > >> Hi Robert, >> >> below is my frame code, and this seam to fix it. But, just a question, >> shouldnt the main view matrix be updated by the camera manipulator prior to >> any other update (I have attached UpdateCallback to the pre render camera >> and these seam to be called before the main camera update which results in >> frame delay)? >> >> if (_viewer.valid()) >> { >> static bool firstFrame = true; >> if (firstFrame) >> { >> _viewer->frame(); >> >> firstFrame = false; >> } >> else >> { >> _viewer->advance(); >> _viewer->eventTraversal(); >> _viewer->updateTraversal(); >> >> if (_reflectionCamera.valid()) >> { >> >> _reflectionCamera->setViewMatrix(_viewer->getView(0)->getCamera()->getViewMatrix()); >> } >> _viewer->renderingTraversals(); >> } >> >> } >> >> This way it works, it gurantee the pre render camera has the updated view >> matrix >> With this update callback it is with delay >> >> class FollowMainCameraNodeCallback : public osg::NodeCallback >> { >> public: >> FollowMainCameraNodeCallback(osg::Camera* camera) >> : _camera(camera) >> { >> >> } >> >> virtual void operator()(osg::Node* node, osg::NodeVisitor* nv) >> { >> osg::Camera* thisCamera = dynamic_cast(node); >> if (!thisCamera) return; >> >> thisCamera->setViewMatrix(_camera->getViewMatrix()); >> >> . >> _reflectionCamera->setUpdateCallback(new >> FollowMainCameraNodeCallback(_viewer->getView(0)->getCamera())); >> >> Nick >> >> >> On Fri, Oct 24, 2014 at 5:31 PM, Trajce Nikolov NICK < >> trajce.nikolov.n...@gmail.com> wrote: >> >>> thanks Robert >>> >>> Nick >>> >>> On Fri, Oct 24, 2014 at 5:19 PM, Robert Osfield < >>> robert.osfi...@gmail.com> wrote: >>> Hi Nick, The update of the CameraManipulator happens at the end of VIewer::updateTraversal(). The default Viewer::frame() implementation() runs the event and then update traversal. Your own application can override any of the viewer.frame() or updateTraversal/eventTraversal() methods so if you want to take control and do things in a different from standard you can do. Robert. On 24 October 2014 16:13, Trajce Nikolov NICK < trajce.nikolov.n...@gmail.com> wrote: > Hi Community, > > I am facing the same problem for long time and always have to "hack > it". I have prerender camera that has to follow the main camera. My > pre-render camera is always a frame behind the main camera which is > updated > by a CameraManipulator. > > The update of the Pre-Render camera is done with UpdateCallback that > simply copy the ViewMatrix of the main camera, but it seam that the main > camera is updated afterwards. > > What is the order of these updates? I was expecting the main camera is > updated from the CameraMainpulator and then everything else (including the > Pre-Render cameras), but seam it is not the case? > > Any hints on this? > > Thanks a bunch as always! > > Nick > > -- > trajce nikolov nick > > ___ > osg-users mailing list > osg-users@lists.openscenegraph.org > > http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org > > ___ osg-users mailing list osg-users@lists.openscenegraph.org http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org >>> >>> >>> -- >>> trajce nikolov nick >>> >> >> >> >> -- >> trajce nikolov nick >> >> ___ >> osg-users mailing list >> osg-users@lists.openscenegraph.org >> http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org >> >> > > ___ > osg-users mailing list > osg-users@lists.openscenegraph.org > http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org > > -- trajce nikolov nick ___ osg-users mailing list osg-users@lists.openscenegraph.org http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org
Re: [osg-users] order of PreRender camera with respect to the main camera
HI Nick, If you Camera that is following the main camera requires the same view matrix then could you not simply set the Camera::ReferenceFrame to REALATVE_TF so that it inherits the view and projection matrix from above? Robert. On 25 October 2014 08:35, Trajce Nikolov NICK wrote: > Hi Robert, > > below is my frame code, and this seam to fix it. But, just a question, > shouldnt the main view matrix be updated by the camera manipulator prior to > any other update (I have attached UpdateCallback to the pre render camera > and these seam to be called before the main camera update which results in > frame delay)? > > if (_viewer.valid()) > { > static bool firstFrame = true; > if (firstFrame) > { > _viewer->frame(); > > firstFrame = false; > } > else > { > _viewer->advance(); > _viewer->eventTraversal(); > _viewer->updateTraversal(); > > if (_reflectionCamera.valid()) > { > > _reflectionCamera->setViewMatrix(_viewer->getView(0)->getCamera()->getViewMatrix()); > } > _viewer->renderingTraversals(); > } > > } > > This way it works, it gurantee the pre render camera has the updated view > matrix > With this update callback it is with delay > > class FollowMainCameraNodeCallback : public osg::NodeCallback > { > public: > FollowMainCameraNodeCallback(osg::Camera* camera) > : _camera(camera) > { > > } > > virtual void operator()(osg::Node* node, osg::NodeVisitor* nv) > { > osg::Camera* thisCamera = dynamic_cast(node); > if (!thisCamera) return; > > thisCamera->setViewMatrix(_camera->getViewMatrix()); > > . > _reflectionCamera->setUpdateCallback(new > FollowMainCameraNodeCallback(_viewer->getView(0)->getCamera())); > > Nick > > > On Fri, Oct 24, 2014 at 5:31 PM, Trajce Nikolov NICK < > trajce.nikolov.n...@gmail.com> wrote: > >> thanks Robert >> >> Nick >> >> On Fri, Oct 24, 2014 at 5:19 PM, Robert Osfield > > wrote: >> >>> Hi Nick, >>> >>> The update of the CameraManipulator happens at the end of >>> VIewer::updateTraversal(). The default Viewer::frame() implementation() >>> runs the event and then update traversal. >>> >>> Your own application can override any of the viewer.frame() or >>> updateTraversal/eventTraversal() methods so if you want to take control and >>> do things in a different from standard you can do. >>> >>> Robert. >>> >>> On 24 October 2014 16:13, Trajce Nikolov NICK < >>> trajce.nikolov.n...@gmail.com> wrote: >>> Hi Community, I am facing the same problem for long time and always have to "hack it". I have prerender camera that has to follow the main camera. My pre-render camera is always a frame behind the main camera which is updated by a CameraManipulator. The update of the Pre-Render camera is done with UpdateCallback that simply copy the ViewMatrix of the main camera, but it seam that the main camera is updated afterwards. What is the order of these updates? I was expecting the main camera is updated from the CameraMainpulator and then everything else (including the Pre-Render cameras), but seam it is not the case? Any hints on this? Thanks a bunch as always! Nick -- trajce nikolov nick ___ osg-users mailing list osg-users@lists.openscenegraph.org http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org >>> >>> ___ >>> osg-users mailing list >>> osg-users@lists.openscenegraph.org >>> http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org >>> >>> >> >> >> -- >> trajce nikolov nick >> > > > > -- > trajce nikolov nick > > ___ > osg-users mailing list > osg-users@lists.openscenegraph.org > http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org > > ___ osg-users mailing list osg-users@lists.openscenegraph.org http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org
Re: [osg-users] order of PreRender camera with respect to the main camera
Hi Robert, below is my frame code, and this seam to fix it. But, just a question, shouldnt the main view matrix be updated by the camera manipulator prior to any other update (I have attached UpdateCallback to the pre render camera and these seam to be called before the main camera update which results in frame delay)? if (_viewer.valid()) { static bool firstFrame = true; if (firstFrame) { _viewer->frame(); firstFrame = false; } else { _viewer->advance(); _viewer->eventTraversal(); _viewer->updateTraversal(); if (_reflectionCamera.valid()) { _reflectionCamera->setViewMatrix(_viewer->getView(0)->getCamera()->getViewMatrix()); } _viewer->renderingTraversals(); } } This way it works, it gurantee the pre render camera has the updated view matrix With this update callback it is with delay class FollowMainCameraNodeCallback : public osg::NodeCallback { public: FollowMainCameraNodeCallback(osg::Camera* camera) : _camera(camera) { } virtual void operator()(osg::Node* node, osg::NodeVisitor* nv) { osg::Camera* thisCamera = dynamic_cast(node); if (!thisCamera) return; thisCamera->setViewMatrix(_camera->getViewMatrix()); . _reflectionCamera->setUpdateCallback(new FollowMainCameraNodeCallback(_viewer->getView(0)->getCamera())); Nick On Fri, Oct 24, 2014 at 5:31 PM, Trajce Nikolov NICK < trajce.nikolov.n...@gmail.com> wrote: > thanks Robert > > Nick > > On Fri, Oct 24, 2014 at 5:19 PM, Robert Osfield > wrote: > >> Hi Nick, >> >> The update of the CameraManipulator happens at the end of >> VIewer::updateTraversal(). The default Viewer::frame() implementation() >> runs the event and then update traversal. >> >> Your own application can override any of the viewer.frame() or >> updateTraversal/eventTraversal() methods so if you want to take control and >> do things in a different from standard you can do. >> >> Robert. >> >> On 24 October 2014 16:13, Trajce Nikolov NICK < >> trajce.nikolov.n...@gmail.com> wrote: >> >>> Hi Community, >>> >>> I am facing the same problem for long time and always have to "hack it". >>> I have prerender camera that has to follow the main camera. My pre-render >>> camera is always a frame behind the main camera which is updated by a >>> CameraManipulator. >>> >>> The update of the Pre-Render camera is done with UpdateCallback that >>> simply copy the ViewMatrix of the main camera, but it seam that the main >>> camera is updated afterwards. >>> >>> What is the order of these updates? I was expecting the main camera is >>> updated from the CameraMainpulator and then everything else (including the >>> Pre-Render cameras), but seam it is not the case? >>> >>> Any hints on this? >>> >>> Thanks a bunch as always! >>> >>> Nick >>> >>> -- >>> trajce nikolov nick >>> >>> ___ >>> osg-users mailing list >>> osg-users@lists.openscenegraph.org >>> http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org >>> >>> >> >> ___ >> osg-users mailing list >> osg-users@lists.openscenegraph.org >> http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org >> >> > > > -- > trajce nikolov nick > -- trajce nikolov nick ___ osg-users mailing list osg-users@lists.openscenegraph.org http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org
Re: [osg-users] order of PreRender camera with respect to the main camera
thanks Robert Nick On Fri, Oct 24, 2014 at 5:19 PM, Robert Osfield wrote: > Hi Nick, > > The update of the CameraManipulator happens at the end of > VIewer::updateTraversal(). The default Viewer::frame() implementation() > runs the event and then update traversal. > > Your own application can override any of the viewer.frame() or > updateTraversal/eventTraversal() methods so if you want to take control and > do things in a different from standard you can do. > > Robert. > > On 24 October 2014 16:13, Trajce Nikolov NICK < > trajce.nikolov.n...@gmail.com> wrote: > >> Hi Community, >> >> I am facing the same problem for long time and always have to "hack it". >> I have prerender camera that has to follow the main camera. My pre-render >> camera is always a frame behind the main camera which is updated by a >> CameraManipulator. >> >> The update of the Pre-Render camera is done with UpdateCallback that >> simply copy the ViewMatrix of the main camera, but it seam that the main >> camera is updated afterwards. >> >> What is the order of these updates? I was expecting the main camera is >> updated from the CameraMainpulator and then everything else (including the >> Pre-Render cameras), but seam it is not the case? >> >> Any hints on this? >> >> Thanks a bunch as always! >> >> Nick >> >> -- >> trajce nikolov nick >> >> ___ >> osg-users mailing list >> osg-users@lists.openscenegraph.org >> http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org >> >> > > ___ > osg-users mailing list > osg-users@lists.openscenegraph.org > http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org > > -- trajce nikolov nick ___ osg-users mailing list osg-users@lists.openscenegraph.org http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org
Re: [osg-users] order of PreRender camera with respect to the main camera
Hi Nick, The update of the CameraManipulator happens at the end of VIewer::updateTraversal(). The default Viewer::frame() implementation() runs the event and then update traversal. Your own application can override any of the viewer.frame() or updateTraversal/eventTraversal() methods so if you want to take control and do things in a different from standard you can do. Robert. On 24 October 2014 16:13, Trajce Nikolov NICK wrote: > Hi Community, > > I am facing the same problem for long time and always have to "hack it". I > have prerender camera that has to follow the main camera. My pre-render > camera is always a frame behind the main camera which is updated by a > CameraManipulator. > > The update of the Pre-Render camera is done with UpdateCallback that > simply copy the ViewMatrix of the main camera, but it seam that the main > camera is updated afterwards. > > What is the order of these updates? I was expecting the main camera is > updated from the CameraMainpulator and then everything else (including the > Pre-Render cameras), but seam it is not the case? > > Any hints on this? > > Thanks a bunch as always! > > Nick > > -- > trajce nikolov nick > > ___ > osg-users mailing list > osg-users@lists.openscenegraph.org > http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org > > ___ osg-users mailing list osg-users@lists.openscenegraph.org http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org
[osg-users] order of PreRender camera with respect to the main camera
Hi Community, I am facing the same problem for long time and always have to "hack it". I have prerender camera that has to follow the main camera. My pre-render camera is always a frame behind the main camera which is updated by a CameraManipulator. The update of the Pre-Render camera is done with UpdateCallback that simply copy the ViewMatrix of the main camera, but it seam that the main camera is updated afterwards. What is the order of these updates? I was expecting the main camera is updated from the CameraMainpulator and then everything else (including the Pre-Render cameras), but seam it is not the case? Any hints on this? Thanks a bunch as always! Nick -- trajce nikolov nick ___ osg-users mailing list osg-users@lists.openscenegraph.org http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org