📄 shuttlecallback.cpp
字号:
#include <osg/MatrixTransform>#include "ShuttleCallback.h"ShuttleCallback::ShuttleCallback(const osg::Vec3& startPos, const osg::Vec3& endPos, float frequency){ _startPos = startPos; _endPos = endPos; _frequency = frequency; _previousTraversalNumber = -1; _previousTime = -1.0; _angle = 0.0;}void ShuttleCallback::operator() (osg::Node* node, osg::NodeVisitor* nv){ if (!nv) return; osg::MatrixTransform* transform = dynamic_cast<osg::MatrixTransform*>(node); if (!transform) return; const osg::FrameStamp* fs = nv->getFrameStamp(); if (!fs) return; // ensure that we do not operate on this node more than // once during this traversal. This is an issue since node // can be shared between multiple parents. if (nv->getTraversalNumber()!=_previousTraversalNumber) { double currentTime = fs->getSimulationTime(); _angle += (currentTime - _previousTime) * 2 * osg::PI * _frequency; double frac = 0.5 + 0.5 * sin(_angle); osg::Vec3 position = _startPos * (1.0 - frac) + _endPos * frac; // update the specified transform transform->setMatrix(osg::Matrix::translate(position)); _previousTraversalNumber = nv->getTraversalNumber(); _previousTime = currentTime; } // must call any nested node callbacks and continue subgraph traversal. traverse(node,nv);}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -