[osg-users] Slave camera lighting with disabled main camera
Ravi Mathur
ravidavi at utexas.edu
Mon Jan 8 17:07:16 PST 2018
Hi all,
Sorry to bring up yet another question about osg::View::setLightingMode(NO_LIGHT), but I'm having trouble understanding some lighting behavior.
Suppose I have a simple scene with no explicitly-specified StateSets ... e.g. I'm not setting lights or enabling GL_LIGHTING or anything like that. If I do viewer.setLightingMode(NO_LIGHT), then as expected the viewer doesn't set up any light and doesn't enable GL_LIGHTING. If I add a slave camera, then that slave camera also has no lighting, also as expected.
Now suppose I disable the main camera using viewer.getCamera()->setGraphicsContext(NULL). Suddenly, the slave camera goes back to the default headlight! I've searched around and looked through the code for Renderer and SceneView, but am not able to make sense of this. Can anyone please explain it?
BTW I'm on the OpenSceneGraph-3.5.6 Git tag.
Thanks!
Ravi
Here's the minimal example code to duplicate this behavior.
Code:
using namespace osg;
int main()
{
// Standard OSG sphere
ShapeDrawable* sphereSD = new ShapeDrawable(new Sphere());
Geode *sphereGeode = new Geode();
sphereGeode->addDrawable(sphereSD);
// Viewer with no light
osgViewer::Viewer viewer;
viewer.setSceneData(sphereGeode);
viewer.setUpViewInWindow(30, 30, 640, 480);
viewer.setLightingMode(View::NO_LIGHT);
// Slave camera
Camera* slaveCam = new Camera();
slaveCam->setViewport(viewer.getCamera()->getViewport());
slaveCam->setGraphicsContext(viewer.getCamera()->getGraphicsContext());
viewer.addSlave(slaveCam);
// Disable main camera
// This causes slaveCam to have default HEADLIGHT: why??
viewer.getCamera()->setGraphicsContext(NULL);
return viewer.run();
}
------------------
Read this topic online here:
http://forum.openscenegraph.org/viewtopic.php?p=72683#72683
More information about the osg-users
mailing list