查看: 1275|回复: 16

asGroup()问题运行时失败

[复制链接]

该用户从未签到

发表于 2013-6-18 16:48:43 | 显示全部楼层 |阅读模式
test.png 我是参考osg程序设计书中的源码,把飞机当成组节点,在飞机上加上一些东西,编译时成功,但运行时asGroup()这句报错

该用户从未签到

 楼主| 发表于 2013-6-18 16:55:20 | 显示全部楼层
#include <osgDB/ReadFile>
#include <osgViewer/Viewer>
#include <osg/Node>
#include <osg/Group>

void main()
{
    osgViewer::Viewer viewer;
        osg::Group * root = new osg::Group() ;
    osg::Node * node = osgDB::readNodeFile("glider.osg");
    node->asGroup()->addChild(osgDB::readNodeFile("Text.osg"));
        root ->addChild(node) ;
        root ->addChild(osgDB::readNodeFile("osgcool.osgt")) ;
        viewer.setSceneData(root);
    viewer.realize();
    viewer.run();
}

求大神帮看下 test.png

该用户从未签到

发表于 2013-6-18 17:33:53 | 显示全部楼层
本帖最后由 gis_wudi 于 2015-5-27 11:52 编辑

转之前先看node是否是有效指针,其次,转之后也要进行判断是否转换成功

该用户从未签到

发表于 2013-6-18 19:35:03 | 显示全部楼层
错在node->asGroup()->addChild(osgDB::readNodeFile("Text.osg"));
应该:root ->addChild(osgDB::readNodeFile("Text.osg"));即可
但楼上说的:
   “node就是Node类型,怎么可能转成Group”这句话就有点不对了;
    如果Text.osg模型的组成本身根节点就是组节点,是可以用asGroup()的

该用户从未签到

发表于 2013-6-18 19:49:43 | 显示全部楼层
glider.osg文件你可以打开看一下的,它本身是个几何节点,你打开cow.osg就可以了

该用户从未签到

发表于 2013-6-19 07:53:23 | 显示全部楼层
转换之后要做是不是为NULL判断

该用户从未签到

 楼主| 发表于 2013-6-20 14:14:17 | 显示全部楼层
3楼:我是用freesouth大神的《osg程序设计教程》3.1.1节示例5介绍的此用法,把飞机当成组节点
4楼:root ->addChild(osgDB::readNodeFile("Text.osg"));即可 这样当然作为子节点当然可以 但目的是在飞机上加东西哦,即glider.osg

该用户从未签到

 楼主| 发表于 2013-6-20 14:26:37 | 显示全部楼层
敢问5楼6楼:“glider.osg文件你可以打开看一下的,它本身是个几何节点,你打开cow.osg就可以了 ”怎么区分是不是几何节点 cow.osg是什么节点啊

该用户从未签到

 楼主| 发表于 2013-6-20 14:28:23 | 显示全部楼层
我试了cow.osg节点,如5楼所说是可以的 如6楼判断确实为NULL 但不明白

该用户从未签到

发表于 2013-6-21 01:15:40 | 显示全部楼层
1.再用一个GROUP 节点:
把你要加的飞机、文字模型都放到这个节点下;
2.再把这个GROUP 节点添加到场景下就可以了,

你应该看看osg CLASS Reference, 看一下osg:: Node 和osg:: Group节点的类关系,就明白了!

该用户从未签到

发表于 2013-6-24 18:16:47 | 显示全部楼层
很简单的一个比喻:
假设有一条狗(Group),你用“这是一个生命体(Node)”来表达它,没有问题;然后你说“这个生命体是一条狗,我要它吠叫”,当然也是可以实现的
但是假设有一盆花(Geode),你用“这是一个生命体(Node)”来表达它,没有问题;然后你说“这个生命体是一条狗,我要它吠叫”。。。这当然只能返回错误了

该用户从未签到

发表于 2015-5-25 17:33:48 | 显示全部楼层
现在问题来了,怎么往飞机模型上加东西呢?

该用户从未签到

发表于 2015-5-26 10:09:09 | 显示全部楼层
Geode不是Group,你不能在它上面添加节点,你可以把飞机模型加到Group上,在这个Group上加东西,基本等于在飞机上加东西

该用户从未签到

发表于 2015-5-29 16:05:55 | 显示全部楼层
wjz2047 发表于 2015-5-25 17:33
现在问题来了,怎么往飞机模型上加东西呢?

又是你,哈哈

该用户从未签到

发表于 2015-5-29 16:09:06 | 显示全部楼层

你怎么这么活跃,看看我发的新帖子

该用户从未签到

发表于 2015-5-29 16:18:54 | 显示全部楼层
wjz2047 发表于 2015-5-29 16:09
你怎么这么活跃,看看我发的新帖子

去哪里看

该用户从未签到

发表于 2015-5-29 16:21:33 | 显示全部楼层
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

联系我们

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