|
本帖最后由 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;
}
} |
|