📄 pendulumcallback.cpp
字号:
#include <osg/MatrixTransform>#include "PendulumCallback.h"PendulumCallback::PendulumCallback(const osg::Vec3& axis, float startAngle, float endAngle, float frequency){ _axis = axis; _startAngle = startAngle; _endAngle = endAngle; _frequency = frequency; _previousTraversalNumber = -1; _previousTime = -1.0; _angle = 0.0;}void PendulumCallback::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); double rotAngle = _endAngle - _startAngle - osg::PI + (1.0 - frac) * _startAngle + frac * _endAngle; // update the specified transform transform->setMatrix(osg::Matrix::rotate(rotAngle, _axis)); _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 + -