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