查看: 1797|回复: 2

NodeVisitor使用问题!

[复制链接]

该用户从未签到

发表于 2013-5-5 19:31:58 | 显示全部楼层 |阅读模式
本帖最后由 hustlab 于 2013-5-5 19:37 编辑

我遇到这样一个问题:
    在我的电脑中使用OSG+win7+VS2008开发一个C++/CLI的程序,能运行得到结果,可是将可执行文件和所需要的库,dll等拷贝到另一台电脑上运行出现错误。
ddd30505193341.jpg
根据提示是“System.NullReferenceException: 未将对象引用设置到对象的实例。”异常,我查看一下osg书,也没有发现解决办法,希望斑竹帮忙看看如何解决?

我在程序中这样使用nodeVisitor,CMyNodeVisitor类是flysky书上的例子。
//自定义节点访问器 .h 文件如下:

class CMyNodeVisitor : public osg::NodeVisitor
{
private:
        std::string m_NameToFind;     //需要查找的节点的名字
        osg::Node* m_NodeToFind; //查找得到的节点

public:
        CMyNodeVisitor();
        ~CMyNodeVisitor();

        void setNameToFind(const std::string& str);      //设置要查找节点的名字
        osg::Node* getFindNode();                        //返回查找得到的节点


        //重载apply方法
        virtual void apply(osg::Node&  searchNode);       
        virtual void apply(osg::Geode& searchNode);//要查geode节点
        virtual void apply(osg:ositionAttitudeTransform& searchNode);


};

程序中这样使用:
                           CMyNodeVisitor nodeVisitor;//是不是这样得不得对象的实例呢?
                        nodeVisitor.setNameToFind("节点名字");
                        gateNode->accept(nodeVisitor);

在其他电脑上运行的详细错误如下:

有关调用实时(JIT)调试而不是此对话框的详细信息,
请参见此消息的结尾。

************** 异常文本 **************
System.NullReferenceException: 未将对象引用设置到对象的实例。
   在 CMyNodeVisitor.apply(CMyNodeVisitor* , Geode* searchNode)
   在 osg.NodeVisitor.traverse(NodeVisitor* , Node* )
   在 CMyNodeVisitor.apply(CMyNodeVisitor* , Node* searchNode)
   在 osg.NodeVisitor.traverse(NodeVisitor* , Node* )
   在 CMyNodeVisitor.apply(CMyNodeVisitor* , Node* searchNode)
   在 eastLakeSimulation.Form1.loadScene()
   在 eastLakeSimulation.Form1.Form1_Load(Object sender, EventArgs e)
   在 System.Windows.Forms.Form.OnLoad(EventArgs e)
   在 System.Windows.Forms.Form.OnCreateControl()
   在 System.Windows.Forms.Control.CreateControl(Boolean fIgnoreVisible)
   在 System.Windows.Forms.Control.CreateControl()
   在 System.Windows.Forms.Control.WmShowWindow(Message& m)
   在 System.Windows.Forms.Control.WndProc(Message& m)
   在 System.Windows.Forms.ScrollableControl.WndProc(Message& m)
   在 System.Windows.Forms.ContainerControl.WndProc(Message& m)
   在 System.Windows.Forms.Form.WmShowWindow(Message& m)
   在 System.Windows.Forms.Form.WndProc(Message& m)
   在 System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
   在 System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
   在 System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)

该用户从未签到

发表于 2013-5-6 01:22:54 | 显示全部楼层
osg::NodeVisitor  的作用,就是根据节点树,从该节点出发向下(或向上)遍历场景树上的所有节点!
    未将对象引用设置到对象的实例:
              问题可能是:
                     1。构造函数就没有成功构造你的nodeVisitor对象(极大的可能性)。
                           如果从上面你给出的类如果是这样没有改动的话,应该不会成功!
                    你地构造函数是否关联到基类,你是否重载编写了新的 apply(),或是没关联到NODE,
                   建议:你多看看网上的相同的nodeVisitor实例(很多呀),把构造函数和重载函数好好查看一下,修改!
                     2. 你的对象节点gateNode只是定义,但没有实例化,是个空节点!
                     3. 就是 没有将节点加入到场景中,场景树上没有该节点,也就无法遍历。

该用户从未签到

 楼主| 发表于 2013-5-6 10:01:24 | 显示全部楼层
哎呦,原因找到了!
    原来是路径的问题,我在程序中使用了绝对路径,发布时候忘了改为相对路径了!
谢谢 VR_user_happy的回复!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

联系我们

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