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
[email protected]
http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org