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

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
    关注
    评论

报告相同问题?

悬赏问题

  • ¥50 永磁型步进电机PID算法
  • ¥15 sqlite 附加(attach database)加密数据库时,返回26是什么原因呢?
  • ¥88 找成都本地经验丰富懂小程序开发的技术大咖
  • ¥15 如何处理复杂数据表格的除法运算
  • ¥15 如何用stc8h1k08的片子做485数据透传的功能?(关键词-串口)
  • ¥15 有兄弟姐妹会用word插图功能制作类似citespace的图片吗?
  • ¥200 uniapp长期运行卡死问题解决
  • ¥15 latex怎么处理论文引理引用参考文献
  • ¥15 请教:如何用postman调用本地虚拟机区块链接上的合约?
  • ¥15 为什么使用javacv转封装rtsp为rtmp时出现如下问题:[h264 @ 000000004faf7500]no frame?