1.在某些角度下,加上OSG自带的卡车模型,场景会变暗,其他角度下亮度正常.
2. 没有卡车模型时,场景亮度也正常.
请问这是什么原因?
我创建的太阳光代码(太阳位于天顶), createSunLight返回场景图的根节点:
osg::Group* createSunLight()
{
osg::ref_ptr<osg::Light> sunLight = new osg::Light;
sunLight->setLightNum(1);
//const double sqrt3_3 = 0.577350269189626;
sunLight->setPosition(osg::Vec4(0, 0, 1, 0.0f));
sunLight->setAmbient(osg::Vec4(1.0, 1.0, 1.0, 1.0));
sunLight->setDiffuse(osg::Vec4(1.0, 1.0, 1.0, 1.0));
sunLight->setSpecular(osg::Vec4(1, 1, 1, 1));
sunLight->setConstantAttenuation(0);
sunLight->setLinearAttenuation(0);
sunLight->setQuadraticAttenuation(0);
osg::ref_ptr<osg::LightSource> lightSource1 = new LightSourceNoBox;
lightSource1->setLocalStateSetModes(osg::StateAttribute::ON);
lightSource1->setLight(sunLight.get());
osg::ref_ptr<osg::Group> lightGroup(new osg::Group);
lightGroup->addChild(lightSource1.get());
osg::ref_ptr<osg::Group> root(new osg::Group);
root->addChild(lightGroup.get());
osg::ref_ptr<osg::StateSet> ss(root->getOrCreateStateSet());
ss->setMode(GL_LIGHT0, osg::StateAttribute::ON);
ss->setMode(GL_LIGHTING, osg::StateAttribute::ON | osg::StateAttribute::OVERRIDE);
return root.release();
}
这是大地的材质属性代码:
osg::ref_ptr<osg::Material> material = new osg::Material;
material->setAmbient(osg::Material::FRONT_AND_BACK, m_color);
material->setDiffuse(osg::Material::FRONT_AND_BACK, m_color);
material->setShininess(osg::Material::FRONT_AND_BACK, 90.0);
ret->getOrCreateStateSet()->setAttribute(material.get());
下面代码有显著影响,但是也不是期望的,我希望关闭OSG的缺省光源,使用自己的光源.
osgViewer->setLightingMode(osg::View::SKY_LIGHT);
可以看到1,2图都有卡车,但是角度不同,一个明亮,一个黑暗. 1,3图角度相同,有卡车的场景是黑暗的.
各位大神有什么提示吗?