查看: 1725|回复: 2

重设法线的问题,以及将Node转换为Geode时出错!

[复制链接]

该用户从未签到

发表于 2013-11-1 16:37:19 | 显示全部楼层 |阅读模式
我读取的一个osgb模型正面光照背面亮,背面光照正面亮,应该是法线反了。

写了一个函数用Smooth重设法线,但运行出错。

代码如下:

bool SceneObj::SmoothGeoNode(osg::ref_ptr<osg::Node> geoNode)
{
        osg::ref_ptr<osg::Geode> geod = dynamic_cast<osg::Geode*>(geoNode.get());
        if (!geod.get())
        {
                MessageBox(0, "no geode", "notting", 1);//**该对话框弹出,Node转换为Geode失败!!!
                return false;
        }
        osg::Geode:rawableList dl = geod->getDrawableList();
        std::vector<osg::ref_ptr<osg::Drawable>>::iterator itr = dl.begin();
        for (; itr != dl.end(); itr++)
        {
                osgUtil::SmoothingVisitor::smooth(*itr->get()->asGeometry());
        }
        return true;
}

Tips1:我尝试了使用 geoNode.asGeode(),返回空值;

Tips2:我尝试了使用osg::Geode* geoNode,还是返回空值;

Tips3:有没有其他实现方法?比如:将SmoothingVisitor用在Node的 NodeVisitor 里面?怎样写?

该用户从未签到

发表于 2013-11-1 16:58:48 | 显示全部楼层
一个NODE节点,不一定就只是osg:: Geode这一种类型,还是看看osg:: Node的类参考中节点的继承关系图,再做类似:
     dynamic_cast<osg::Geode*>(geoNode.get());这种转换吧!

该用户从未签到

 楼主| 发表于 2013-11-1 17:25:12 | 显示全部楼层
嗯,谢谢,我懂了!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

联系我们

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