查看: 2651|回复: 5

加载模型光照的问题

[复制链接]

该用户从未签到

发表于 2011-1-28 15:52:59 | 显示全部楼层 |阅读模式
我加入了一个3ds模型,采用了两种方法:1、对其法向量进行了归一化,利用默认的光照  2、重新设定了一个光源,但不知为什么,总得不到原来三维建模软件中的效果,光照感觉特别暗,请高手指教

1:       
osg::ref_ptr<osg::Node> spModelNode=osgDB::readNodeFile(m_filePathList[nSelectedID]);

osg::ref_ptr<osg::StateSet>        stateset=new osg::StateSet;
        stateset=spModelNode->getOrCreateStateSet ();
        stateset->setMode(GL_LIGHTING, osg::StateAttribute::ON);
        stateset->setMode(GL_NORMALIZE, osg::StateAttribute::ON);

        spGroup->addChild(spModelNode);

        m_pOSG->getViewer()->setCameraManipulator(new osgGA::TrackballManipulator());




2:
osg::ref_ptr<osg::Node> spModelNode=osgDB::readNodeFile(m_filePathList[nSelectedID]);
spGroup->addChild(CreateLight(spModelNode));
osg::ref_ptr<osg::Group> CPointSymbolDlg::CreateLight(osg::ref_ptr<osg::Node> node)
{

        osg::ref_ptr<osg::Group> lightRoot=new osg::Group();
        lightRoot->addChild(node);


        osg::ref_ptr<osg::StateSet>        stateset=new osg::StateSet;
        stateset=lightRoot->getOrCreateStateSet ();
        stateset->setMode(GL_LIGHTING, osg::StateAttribute::ON);
        stateset->setMode(GL_LIGHT0, osg::StateAttribute::ON);
        stateset->setMode(GL_NORMALIZE, osg::StateAttribute::ON);


        osg::BoundingSphere bs;
        node->computeBound();
        bs=node->getBound();

        osg::ref_ptr<osg:ight> light=new osg::Light;
        light->setLightNum(0);

        light->setDirection(osg::Vec3(0.0f, 0.0f, 1.0f));
        light->setPosition(osg::Vec4(bs.center().x(), bs.center().y(), bs.center().z()-bs.radius(), 1.0f));


        light->setAmbient(osg::Vec4(1.0f,1.0f,1.0f,1.0f));
        light->setDiffuse(osg::Vec4(1.0f,1.0f,1.0f,1.0f));
light->setSpecular(osg::Vec4(1.0f,1.0f,1.0f,1.0f));

        osg::ref_ptr<osg::LightSource>         lightSource=new osg::LightSource;
lightSource->setLight(light.get());
        lightRoot->addChild(lightSource);
return lightRoot.get();

}

该用户从未签到

发表于 2011-1-28 23:08:22 | 显示全部楼层
我觉得您有必要检查下您是否正确设置了法线~~~~实时场景没有必要跟建模软件对比~~~

该用户从未签到

 楼主| 发表于 2011-1-29 09:34:41 | 显示全部楼层
直接导入的其他格式的三维模型,怎么设置法线?
不是这句吗?
stateset->setMode(GL_NORMALIZE, osg::StateAttribute::ON);

该用户从未签到

发表于 2011-1-29 10:17:53 | 显示全部楼层
stateset->setMode(GL_NORMALIZE, osg::StateAttribute::ON);是法线归一化,并不是生成法线~~~

该用户从未签到

发表于 2011-4-9 10:40:33 | 显示全部楼层
我遇到了相同的问题,请问导入的模型怎样生成法线啊?

该用户从未签到

发表于 2011-4-11 08:51:31 | 显示全部楼层
SmoothingVisitor
您需要登录后才可以回帖 登录 | 注册

本版积分规则

OSG中国官方论坛-有您OSG在中国才更好

网站简介:osgChina是国内首个三维相关技术开源社区,旨在为国内更多的技术开发人员提供最前沿的技术资讯,为更多的三维从业者提供一个学习、交流的技术平台。

联系我们

  • 工作时间:09:00--18:00
  • 反馈邮箱:1315785073@qq.com
快速回复 返回顶部 返回列表