deping_chen 2019-04-06 11:20 采纳率: 0%
浏览 1595
已结题

OSG场景光照亮度不正常

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图角度相同,有卡车的场景是黑暗的.

各位大神有什么提示吗?

  • 写回答

1条回答 默认 最新

  • devmiao 2019-04-06 11:26
    关注
    评论

报告相同问题?

悬赏问题

  • ¥15 如何在scanpy上做差异基因和通路富集?
  • ¥20 关于#硬件工程#的问题,请各位专家解答!
  • ¥15 关于#matlab#的问题:期望的系统闭环传递函数为G(s)=wn^2/s^2+2¢wn+wn^2阻尼系数¢=0.707,使系统具有较小的超调量
  • ¥15 FLUENT如何实现在堆积颗粒的上表面加载高斯热源
  • ¥30 截图中的mathematics程序转换成matlab
  • ¥15 动力学代码报错,维度不匹配
  • ¥15 Power query添加列问题
  • ¥50 Kubernetes&Fission&Eleasticsearch
  • ¥15 報錯:Person is not mapped,如何解決?
  • ¥15 c++头文件不能识别CDialog