查看: 1124|回复: 1

关于Node类和Group类的问题

[复制链接]

该用户从未签到

发表于 2013-12-24 11:18:59 | 显示全部楼层 |阅读模式
本帖最后由 liuaner022 于 2013-12-24 14:34 编辑

        最近在看《OSG程序设计教程》。其中第三章里作者说Node类和Group类可以相互转换,并有如下代码:
  1. osg::Group* root = new osg::Group() ;
  2. osg::Node *glider = osgDB::ReadNodeFile(“glider.osg”) ;
  3. glider ->asGroup() ->addChild(osgDB::ReadNodeFile(“xxx.osg”)) ; //此处我修改成"cow.osg"
  4. root ->addChild(glider) ;
  5. root ->addChild(osgDB::readNodeFile(“osgcool.osg”)) ;
复制代码

但是运行时却发现asGroup方法总是返回空指针。于是找出Node文件,其中对asGroup的注释是:
  1. /* convert 'this' into a Group pointer if Node is a Group, otherwise return 0. Equivalent to dynamic_cast<Group*>(this).*/
  2. virtual Group* asGroup() { return 0; }
  3. /* convert 'const this' into a const Group pointer if Node is a Group, otherwise return 0. Equivalent to dynamic_cast<const Group*>(this).*/
  4. virtual const Group* asGroup() const { return 0; }
复制代码

       个人理解是:如果this指针(也就是一个Node指针)指向的是一个Group类实例,那么返回的是转换后的Group指针;如果不是Group类实例则返回0。说白了,就是把一个指向子类实例的父类指针转换成相应的子类指针,遵循最普通的类继承原则。不知道是我理解错误还是原书代码错误。原书貌似用的是OSG 2.2.0,我用的是OSG 3.0.1,不知道是不是因为版本的问题。

您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

联系我们

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