osg 刚开始学的一些问题。

这两天开始学习osg,按照一些教程,安装和配置成功之后,准备编个例子试试,出现了一些问题,仅此记录而已,以待以后再具体分析。

安装和配置教程 请按此按钮

1、

 1 #include <osgViewer/Viewer>
2
3 #include <osgDB/ReadFile>
4
5 int main( int, char** )
6
7 {
8
9 osgViewer::Viewer viewer;
10
11 viewer.setSceneData( osgDB::readNodeFile( "cow.osg" ) );
12
13 return viewer.run();
14
15 }
运行成功,没问题。出现一个小牛。
2、
 1 #include <osgViewer/Viewer>
2 #include <osgDB/ReadFile>
3 int main()
4 {
5 osgViewer::Viewer viewer;
6 osg::Node *node =new osg::Node;
7 node = osgDB::readNodeFile("fountain.osg");
8 viewer.setSceneData(node);
9 return viewer.run();
10
11
12 }


 error LNK2001: 无法解析的外部符号 "public: virtual void __thiscall osg::Object::setName(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &)" (?setName@Object@osg@@UAEXABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@Z)

一般出现这种情况的原因是,没有添加相关的库文件,我检查了一下,此程序的能调动的相关库已经添加完毕,如下:

osgViewerd.lib
osgDBd.lib
osgd.lib
OpenThreadsd.lib
osgGAd.lib,可以说是只多不少。再看(初学者),

下面的程序,是通过添加一个节点,然后添加到场景中去的,是不是node的方法不对?
osg::Node
*node =new osg::Node;
node = osgDB::readNodeFile("fountain.osg");
查相关资料是对的,相关api有

readNodeFile的定义 可以直接添加readNodeFile。 inline osg::Node* readNodeFile(const std::string& filename)
{
return readNodeFile(filename,Registry::instance()->getOptions());
}
通过以上得到:
可能是node new的问题?
osg::Node *node =new osg::Node;
改之,直接用智能指针。


 1 #include <osgViewer/Viewer>
2 #include <osgDB/ReadFile>
3 int main()
4 {
5 osgViewer::Viewer viewer;
6 osg::ref_ptr<osg::Node> node =new osg::Node;
7 node = osgDB::readNodeFile("fountain.osg");
8 viewer.setSceneData(node);
9 return viewer.run();
10
11
12 }

还是出现以上错误。555!

难道不能new?

#include <osgViewer/Viewer>
#include
<osgDB/ReadFile>
int main()
{
osgViewer::Viewer viewer;
osg::ref_ptr
<osg::Node> node = osgDB::readNodeFile("fountain.osg");
node
= osgDB::readNodeFile("fountain.osg");
viewer.setSceneData(node);
return viewer.run();


}

编译成功,正常运行。不明白为什么?

把智能指针换回去。如下:

 1 #include <osgViewer/Viewer>
2 #include <osgDB/ReadFile>
3 int main()
4 {
5 osgViewer::Viewer viewer;
6 osg::Node * node = osgDB::readNodeFile("fountain.osg");
7 viewer.setSceneData(node);
8 return viewer.run();
9
10
11 }

编译通过,生成新实例。这到底是为什么?为什么?难道指针不能new 了?不能分配内存了?还是我的工程配置问题?

然后让同学试我的例子,正常运行。苍天啊,大地啊?why?

看到博文的童鞋,能解决我这个问题的,请给我站内信,万分感谢。

ps:osg2.8+VS2008+xp系统

原文地址:https://www.cnblogs.com/kanego/p/2181335.html