查看: 1826|回复: 8

NodeCallback导致崩溃了

[复制链接]

该用户从未签到

发表于 2009-9-10 21:58:18 | 显示全部楼层 |阅读模式
写了一段代码来给节点设置RTT相机,结果该代码在run前直接应用到节点 一切正常.但是我通过一个NodeCallback在update的时候来调用该段代码 导致程序崩溃.而且崩溃的地方不是在我的代码里面 而是在stl的vector里面. 我的代码中没有用的vector.所以我想是不是OSG内部用到了?

另:使用NodeCallback除了要给对应的节点设置Dynamic外 还要做什么?

该用户从未签到

发表于 2009-9-10 22:23:15 | 显示全部楼层
“stl的vector”……这个错误常常出现在线程调度冲突的时候,您可能没有正确设置节点的DYNAMIC属性

该用户从未签到

 楼主| 发表于 2009-9-10 22:39:45 | 显示全部楼层
我把Callback设置在根节点上 除了将根节点调用了setDataVariance(DYNAMIC)外 还要设置其他节点吗?
在Callback中新加入的Camera也都是在root下的.这些Camera也要设置为DYNAMIC吗?

dynamic的使用有什么规则 我现在知道的就是如果节点需要在渲染的流程中修改 就将该节点设置为dynamic的.

该用户从未签到

 楼主| 发表于 2009-9-10 22:41:06 | 显示全部楼层
在callback中给别的节点贴纹理(RTT)了 是不是那些节点都要设置dynamic? 贴纹理也算是修改了节点吧

该用户从未签到

 楼主| 发表于 2009-9-10 22:46:43 | 显示全部楼层
但是那些节点是PagedLOD自动载入的 等我拿到数据的时候已经在callback里面了..

该用户从未签到

发表于 2009-9-11 00:26:01 | 显示全部楼层
我的矢量实现方案其实与您的类似,不过我是提前准备一组RTT相机,然后在运行时把它们依次指定给需要更新的地块;过几帧(注意不能每帧,FBO机制不允许)之后再指定给别的地块。也许您可以参考一下

该用户从未签到

 楼主| 发表于 2009-9-11 01:09:25 | 显示全部楼层
还是不是很理解具体该怎么处理.

我现在是在frame()前通过一个visitor去访问整个场景中的节点 如果找到某个PagedLOD没有设置RTT相机 就给他专门new一个相机 并设置好参数 然后把相机加入到根节点中去.(目前我使用的测试数据 实际上不会构建很多相机.)但是这样的机制在处理osgDEM输出的大数据时,的确会构建大量的相机.

看您的做法 似乎是用固定数量的相机 然后不断重复使用这些相机去渲染不同的矢量图形就可以达到目的,是这样的吗?
如果相机的数量本身不是一个系统限制的话 那么程序不应该崩溃掉才对 也许会特别慢以至于死掉 但是应该不会崩溃.

我觉得我现在的问题 还是因为在渲染的时候更新数据导致的.

另外 您所说的 过几帧再制定给别的地块 这个如何控制? 是否可以认为对frame的每次调用就是一帧?

该用户从未签到

 楼主| 发表于 2009-9-11 01:12:18 | 显示全部楼层
另:所有的PagedLOD节点都设置setDataVariance(Node:YNAMIC)了 .
我用了一个笨方法.
先按文件名的规律 读出所有的ive文件 这样就得到了系列的PagedLOD节点
然后对每个设置setDataVariance
然后把节点写会到原文件.

该用户从未签到

发表于 2009-9-11 08:52:19 | 显示全部楼层
您需要设法跟踪一下自己的代码,仅凭文字的讨论,我无法看出您的代码有什么问题。

“用固定数量的相机 然后不断重复使用这些相机去渲染矢量图形就可以达到目的”,是这样
在OSG中,“对frame的每次调用就是一帧”,这句话没错。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

联系我们

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