查看: 3339|回复: 7

纹理更新回调的问题

[复制链接]

该用户从未签到

发表于 2008-4-9 11:22:10 | 显示全部楼层 |阅读模式
源代码如下: 桌面.rar (1.7 MB, 下载次数: 206)

该用户从未签到

 楼主| 发表于 2008-4-9 15:40:34 | 显示全部楼层
删除的时候也有问题

该用户从未签到

发表于 2008-4-9 20:12:49 | 显示全部楼层
个人觉得这个程序最大的问题是触发addbody函数的时机,它事实上是游离于OSG的APP/CULL/DRAW三个线程之外,响应用户的菜单而实时创建节点的~~这样必然会引发问题。
建议采用类似NPS教程中控制坦克运动的代码的方式,即:
1、为场景根节点创建一个更新回调,在该回调中执行addbody,以创建ShapeDrawable及Geode,MatrixTransform节点等相关内容;
2、addbody的执行是有条件的,例如置一个标志位signal,通常情况下(signal==0)并不执行函数;
3、当用户在菜单中选择某一项时,将标志位signal置为非零,从而执行一次addbody函数,并随即将signal归0

该用户从未签到

 楼主| 发表于 2008-4-9 20:15:46 | 显示全部楼层
原帖由 array 于 2008-4-9 20:12 发表
个人觉得这个程序最大的问题是触发addbody函数的时机,它事实上是游离于OSG的APP/CULL/DRAW三个线程之外,响应用户的菜单而实时创建节点的~~这样必然会引发问题。
建议采用类似NPS教程中控制坦克运动的代码的方式, ...


可是如果我把更新回调的那两句话注释掉,运行的时候就没有问题了。

该用户从未签到

发表于 2008-4-9 21:12:46 | 显示全部楼层
只要设置了DYNAMIC参数,在APP线程之外创建节点、调整摄像机矩阵还是可以实现的。不过因为破坏了渲染线程的结构,代码本身应该会有问题,比如创建更新回调的时候~~

该用户从未签到

 楼主| 发表于 2008-4-10 19:50:58 | 显示全部楼层
原帖由 array 于 2008-4-9 21:12 发表
只要设置了DYNAMIC参数,在APP线程之外创建节点、调整摄像机矩阵还是可以实现的。不过因为破坏了渲染线程的结构,代码本身应该会有问题,比如创建更新回调的时候~~



不用回调,我直接添加纹理,为什么按openscenegraph quick start里面的贴texture2D的方式
osg::ref_ptr<osg::Texture2D> texture=new osg::Texture2D;
        osg::ref_ptr<osg::Image> image=new osg::Image;
        image->setFileName("Images/Map0.tga");
        texture->setImage(image.get());
        osg::ref_ptr<osg::StateSet>state=new osg::StateSet;
        state->setTextureAttributeAndModes(0,texture.get());
纹理贴不上呢

该用户从未签到

发表于 2008-4-10 20:30:57 | 显示全部楼层
有没有使用setStateSet()把变量state关联到某个节点上?还有注意渲染状态继承的问题。

该用户从未签到

 楼主| 发表于 2008-4-11 19:19:20 | 显示全部楼层
原帖由 array 于 2008-4-10 20:30 发表
有没有使用setStateSet()把变量state关联到某个节点上?还有注意渲染状态继承的问题。



已经关联到节点上了阿
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

联系我们

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