Dear OSG forum,

I am having trouble using shaders in the context of multiple views (either 
several Viewer objects or a CompositeViewer). When using shaders (either vertex 
or fragment), you most often need to let the shaders know about the camera 
configuration. In the case where a single view (i.e. single camera) is used, 
this can be done via a ModelViewProjectionMatrix uniform and setting up a 
callback camera callback such that when the camera is updated, the shader is 
informed about the update:


Code:

struct ModelViewProjectionMatrixCallback: public osg::Uniform::Callback {
        ModelViewProjectionMatrixCallback(osg::Camera* camera) :
                        _camera(camera) {
        }

        virtual void operator()(osg::Uniform* uniform, osg::NodeVisitor* nv) {
                osg::Matrixd viewMatrix = _camera->getViewMatrix();
                osg::Matrixd modelMatrix = 
osg::computeLocalToWorld(nv->getNodePath());
                osg::Matrixd modelViewProjectionMatrix = modelMatrix * 
viewMatrix * _camera->getProjectionMatrix();
                uniform->set(modelViewProjectionMatrix);
        }

        osg::Camera* _camera;
};


osg::Uniform* modelViewProjectionMatrix = new 
osg::Uniform(osg::Uniform::FLOAT_MAT4, "ModelViewProjectionMatrix");
modelViewProjectionMatrix->setUpdateCallback(new 
ModelViewProjectionMatrixCallback(camera));




But in the case where multiple views are used, there are multiple cameras and 
if we install callbacks on all cameras, then the shader may be informed about 
camera 2 being updated but being rendering the view of camera 0. And in this 
case view 0 will be drawn with the configuration of camera 2, no?

I guess I am wrong somewhere? Or else what should I change in my code to get 
shaders in the context of multiple views?

Thank you!

Cheers,
Antoine

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





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

Reply via email to