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