查看: 1559|回复: 3

关于手动回调更新的问题。

[复制链接]

该用户从未签到

发表于 2009-9-17 16:37:13 | 显示全部楼层 |阅读模式
本帖最后由 ydwcowboy 于 2009-9-17 16:39 编辑

今天看了哈UpdateCallback,节点回调。发现:设置了以后的确是每帧都在回调。

但我发现如果想人为控制它的回调,还要去计算时间。

我现在的问题是:假设我在Pick交互的时候,将选中的Node节点信息装入vector向量组中。
然后我再设置一个按钮来触发,更新这些节点信息。比如移动位置。数据我从vector中取,因为它是全局变量了。我已经取到节点信息了,但如何手动改变它们的状态?

代码:
//设置旋转
arrSeleNodeVector是我定义的vecotr,里边装的是Node*数据.
int cOSG::setRote()
{

        if(arrSeleNodeVector.size()!=0)
        {
               
                int i;
                for(i=0;i<arrSeleNodeVector.size();i++)
                {
                        osg::ref_ptr<osg::MatrixTransform> mtLeft=new osg::MatrixTransform;
                        mtLeft->setReferenceFrame(osg::Transform::ABSOLUTE_RF);
                        //旋转角度
                        float roll = osg::inDegrees(30.0f);
                        // 分40个阶段
                        int numSamples = 40;
                        float yaw = 0.0f;
                         // 偏航的分量
                        float yaw_delta = 2.0f*osg:I/((float)numSamples-1.0f);
                        osg:uat rotation(osg::Quat(roll,osg::Vec3(0.0,1.0,0.0))*osg::Quat(-(yaw+osg::inDegrees(90.0f)),osg::Vec3(0.0,0.0,1.0)));
                        osg::Matrix *R;
                        R = new osg::Matrix();
                        R->setRotate(rotation);
                        mtLeft->setMatrix(*R);
                        osg::Node* tmp = arrSeleNodeVector.at(i);
                        mtLeft->addChild(tmp);
                        mRoot->addChild(mtLeft.get());
                }
               
                return 0;
        }
        else
        {
                return -1;
        }
}

该用户从未签到

发表于 2009-9-17 16:40:48 | 显示全部楼层
尽量不要在仿真循环之外更新节点的状态,那样对于多线程渲染的程序而言很危险。即使是按下按钮触发,也建议只是从GUI传递一个标志量到更新回调中,然后在回调中更新节点信息(例如移动,增减)

该用户从未签到

 楼主| 发表于 2009-9-17 16:43:45 | 显示全部楼层
本帖最后由 ydwcowboy 于 2009-9-17 16:45 编辑

不太懂,可能这就是我没搞明白的地方吧。可不可举例,或画个图。

我的思路是:因为有个PICK交互,先选中,再更新。但选中的节点信息放在哪儿呢?

该用户从未签到

发表于 2009-9-17 17:30:48 | 显示全部楼层
您可以保存在vector中,然后在更新回调中再调整它们
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

联系我们

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