查看: 1327|回复: 4

"第一课:OpenSceneGraph几何体的绘制" 代码的问题

[复制链接]

该用户从未签到

发表于 2009-12-2 13:07:30 | 显示全部楼层 |阅读模式
osg:rawElementsUInt* pyramidBase =
      new osg::DrawElementsUInt(osg:rimitiveSet:UADS, 0);
   pyramidBase->push_back(3);
   pyramidBase->push_back(2);
   pyramidBase->push_back(1);
   pyramidBase->push_back(0);
   pyramidGeometry->addPrimitiveSet(pyramidBase);
这段代码在执行以后,运行到第一个push_bace,程序崩溃,告知说pramidBase是一个空指针.
查询了相关一些资料,好像都是这么使用。 请教一下,怎么会出现这种问题,如何解决?

该用户从未签到

发表于 2009-12-2 13:18:48 | 显示全部楼层
您是如何判断pyramidBase是一个空指针的?在new之后马上判断if (pyramidBase==NULL)吗?

理论上讲,new之后出现空指针的可能性只有一个,就是内存不足导致分配失败;不过这几乎是不可能的(您的系统连几KB的内存都分配不出来了)。所以我认为您的推论可能有误,请检查自己的工程配置,如果是Debug版本的工程,请不要使用Release版本的osg库

该用户从未签到

 楼主| 发表于 2009-12-2 17:16:38 | 显示全部楼层
array,你的判断是对的,呵呵。我在debug版本中使用了release版本的osg库,真是愚蠢。
现在又遇到一个新的现象:
        osgViewer::Viewer viewer;
        viewer.setSceneData(root);
        viewer.run();
程序执行到viewer.setSceneData(root)处就发生中断,每次都是中断到
void  Viewer::setReferenceTime(double time),这个函数在Viewer.cpp的文件中
我注释掉了中间的代码,程序还是中断在这个位置。
不知道这会不会又是我在编译环境的设置上有疏漏呢?

该用户从未签到

发表于 2009-12-3 08:22:13 | 显示全部楼层
我无法判断,并且依然认为您的调试方法是不正确的。请检查工程配置,或者在这里简要地列出您所使用的依赖库

该用户从未签到

 楼主| 发表于 2009-12-3 13:50:32 | 显示全部楼层
呵呵,我重现将osg例子工程编译安装了一遍。 原来我用的安装程序是2.2,但是源代码用的是2.3.7,这回我改用2.2的源代码,进行编译生成。 然后加了这两步:
Properties - C/C++ - General - Additional Include  Directories = $(OSG_INCLUDE_PATH)
Properties - Linker - General - Additional Library Directories = $(OSG_LIB_PATH),原来只是在工具-选项的vc++目录下包含的库和头文件。
这些操作以后,我重新调试这个课程的代码,发现就没有问题了。我自己现在不知道是哪一步解决了问题。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

联系我们

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