zoukankan      html  css  js  c++  java
  • 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系统

  • 相关阅读:
    继承关系中子类使用@Data注解问题
    Professional, Entreprise, Architect版本的区别
    Delphi中ARC内存管理的方向
    技术的止境(客户价值第一,快速实现第二,边做边学,迅速成为牛人。紧贴客户的需求去做技术,立于不败之地。追求的目标:把一项产品去做好,用产品去养活自己和家人)good
    C++ 函数模板与类模板(使用 Qt 开发编译环境)
    C++进阶之虚函数表
    Net反编译软件
    python虚拟环境--virtualenv和virtualenvwrapper
    Windows同时安装python3和python2
    python的pip源在windows和linux修改
  • 原文地址:https://www.cnblogs.com/kanego/p/2181335.html
Copyright © 2011-2022 走看看