在球的基础上进行操作。
添加光照前:
添加光照后:
实现如下:
osg::LightSource*createLight()
{
osg::ref_ptr<osg::Light> l = newosg::Light;
l->setLightNum(0);//启用第几个光源 OpenGL有8个光源
//l->setAmbient(osg::Vec4(0.0f,1.0f,1.0f,1.0f));//环境光成分 太强影响照射 此处不用
//l->setDiffuse(osg::Vec4(0.0f,1.0f,1.0f,1.0f));//散射光成分
//l->setSpecular()镜面光成分
l->setDirection(osg::Vec3(0,0,-1));//方向
l->setPosition(osg::Vec4(0.0,0.0,100.0,0.0f));//位置
osg::LightSource* ls = newosg::LightSource();//此处用超级指针 返回会发生错误
ls->setLight(l);
return ls;
}
注:osg::ref_ptr相当于一个指针,但实际上是一个模板类(重载了*与=操作符),使用时对象必须继承自osg::Referenced(该类为所有要引用计数类的基类)
osg::LightSource继承自osg::Referenced,此处不知为何返回出错