网上查找了关于osg光源的设置,基本上都是一个光源的,后来查找了一些资料,包括osg官方的例子。其实多个光源的实现非常简单,只要多建立一个osg::Light的对象并设置对应参数即可。
以两个光源为例
osg::ref_ptr<osg::Group> createLight(osg::ref_ptr<osg::Node> node)
{
osg::ref_ptr<osg::Group> lightRoot = new osg::Group();
lightRoot->addChild(node);
//开启光照
osg::ref_ptr<osg::StateSet> stateset = new osg::StateSet();
stateset = lightRoot->getOrCreateStateSet();
stateset->setMode(GL_LIGHTING , osg::StateAttribute::ON);
stateset->setMode(GL_LIGHT0 , osg::StateAttribute::ON);//允许GL_LIGHT0光照
stateset->setMode(GL_LIGHT1 , osg::StateAttribute::ON);
//计算包围盒
/*osg::BoundingSphere bs;
node->computeBound();
bs = node->getBound();*/
//创建两个个Light对象
osg::ref_ptr<osg::Light> light = new osg::Light();
osg::ref_ptr<osg::Light> light1 = new osg::Light();