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

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 素材场景中光线烘焙后灯光失效
  • ¥15 请教一下各位,为什么我这个没有实现模拟点击
  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 保护模式-系统加载-段寄存器