查看: 1523|回复: 5

买了肖鹏的书,第一个例子就挂了??

[复制链接]

该用户从未签到

发表于 2010-8-21 04:55:21 | 显示全部楼层 |阅读模式
今天拿到了肖鹏的书,第一个osgVR的例子
提示node.get()、root.get()错误,根据提示一方面node和root都是指针,不能用.吧,应该用->,另外根据提示没有节点和Group都没有get这个函数。
我用的版本是2.8.2的版本,在vs9下编译的,难道和编译环境有关系?
代码如下:
#include "osgViewer/Viewer"
#include <osg/Node>
#include <osg/Geode>
#include <osg/Group>
#include <osgdb/ReadFile>
#include <osgdb/WriteFile>
#include <osgUtil/Optimizer>
int main()
{
osgViewer::Viewer *viewer=new osgViewer::Viewer();
osg::Group *root =new osg::Group();
osg::Node *node=osgDB::readNodeFile("C:\\glider.osg");
root->addChild(node.get());

osgUtil::Optimizer optimizer;
optimizer.optimize(root.get());
viewer->setSceneData(root.get());
viewer->realize();
viewer->run();
}

另外如果改一下上述程序
int main()
{
osgViewer::Viewer *viewer=new osgViewer::Viewer();
  viewer->setSceneData(osgDB::ReadNodeFile("C:\\glider.osg"));
viewer->realize();
viewer->run();
}
程序通过,没有问题

该用户从未签到

发表于 2010-8-21 13:58:58 | 显示全部楼层
node,root都是指针,不能使用 .get();如果要使用,必须是智能指针形式。

该用户从未签到

发表于 2010-8-22 16:13:42 | 显示全部楼层
楼上正解

该用户从未签到

发表于 2010-8-22 16:14:57 | 显示全部楼层
本帖最后由 ccy_ccy2001 于 2010-8-22 16:16 编辑

我再补充一下:按照你定义的,应该按照下面这样子写:
  1. osg::Group *root =new osg::Group();
  2. osg::Node *node=osgDB::readNodeFile("C:\\glider.osg");
  3. root->addChild(node);
复制代码

该用户从未签到

发表于 2010-8-28 09:59:42 | 显示全部楼层
学习了 我就是按照智能指针的写的 没什么问题 看来这个中间还有很多玄妙的地方

该用户从未签到

发表于 2010-8-28 10:24:01 | 显示全部楼层
给大家一个建议,,您修改了我书中示例程序,没有正确运行,请不要说我书中的示例有问题~~~~您可以尝试直接运行例子,,肯定是没问题的~~~~
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

联系我们

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