Robert Osfield <robert.osfi...@...> writes:

> 
> Hi Thorsten,
> 
> By default the OSG computes the near/far planes on the fly during the
> cull traversal on every single frame.  You can disable this.
> Alternatively you could just use the gl_ProjectionMatrix directly on
> the GPU to get the near/far planes - this is how I'd do it, far more
> flexible and never needs any additional uniforms or callbacks.
> 
> Robert.
> 
> On Wed, Dec 1, 2010 at 6:15 PM, Thorsten Roth
> <thorsten.r...@...> wrote:
> > Hi,
> >
> > I currently have a problem with a shader update callback I do not
> > understand. I have a vertex and fragment shader which calculate linear 
depth
> > in [0,1] for me, also respecting dynamic clipping planes. To achieve this, 
I
> > pass zNear and zFar as uniform parameters to the shader. To have them
> > updated, I have the following callback methods (zFar is looking
> > accordingly):
> >
> > class UpdateShaderZNear: public osg::Uniform::Callback {
> > public:
> >        virtual void operator()(osg::Uniform* uniform, osg::NodeVisitor* nv)
> > {
> >                double x, zNear;
> >        viewer->getCamera()->getProjectionMatrixAsPerspective(x,x,zNear,x);
> >                uniform->set((float)zFar);
> >        }
> > };
> >
> > Now when I move my camera towards and away from the object, it seems like
> > the shader update is one frame (or so) "too late", as I get values that do
> > not correspond to the [0,1]-normalization and the problem disappears as 
soon
> > as the camera stops.
> >
> > Is there any reason for that/does anyone have an idea what I'm doing wrong?
> > If more information or code is necessary, just tell me 
> >
> > -Thorsten
> > _______________________________________________
> > osg-users mailing list
> > osg-us...@...
> > http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org
> >
> 

Hi Robert,

I encounter a similar latency problem when I try to update a uniform using 
camera's view matrix in the uniform's callback. Since this uniform is needed 
to compute only once per frame, I decide to compute it on CPU before it's 
submitted to GPU. 

It seems that when the uniform's callback is called, the camera has not been 
updated yet, right?

Currently I solve this problem by updating the uniform in a PreDrawCallback of 
the camera. But is this a graceful way to achieve it?

Thanks in advance.

Guo

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

Reply via email to