|
楼主 |
发表于 2010-4-21 16:48:35
|
显示全部楼层
//nodevisitor可以判断出哪个是需要的结点
virtual void operator() (osg::Node* node, osg::NodeVisitor* nv)
{
//验证得到的结点是不是MatrixTransform
osg::MatrixTransform* transform = dynamic_cast<osg::MatrixTransform*>(node);
//如果是的
if (nv && transform && nv->getFrameStamp())
{
//得到参考时间与当前时间差,用来计算cos然后改变移动值
double time = nv->getFrameStamp()->getReferenceTime();
transform->setMatrix(osg::Matrix::translate(0.0f,1.0f+cosf(time*m_angularVelocity),0.0f));
}
//向下遍历node,以便找到transform
traverse(node,nv);
}
我摘了OSG程序设计里的例子。作者提到:“向下遍历node,以便找到transform”,所以我才留下了“遍历所有的节点,执行相应的操作”的印象。不知我的理解和作者原意的偏差在哪里?以及,traverse已经是遍历了,nv作为参数填在里面做何用?
我这只大菜鸟已经把这个地方灌的全是浓浓的菜味了。实在抱歉:) |
|